[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 orNULL in error case.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The newly allocated table orNULL 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'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'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'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'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>, °ree0, 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, °ree0);
-<a name="l00172"></a>00172 <span class="keyword">const</span> <span class="keywordtype">double</span> val2 = cpl_polynomial_get_coeff(second, °ree0);
-<a name="l00173"></a>00173 cpl_polynomial_set_coeff(<span class="keyword">self</span>, °ree0, 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>, °ree0, 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, °ree0);
-<a name="l00233"></a>00233 <span class="keyword">const</span> <span class="keywordtype">double</span> val2 = cpl_polynomial_get_coeff(second, °ree0);
-<a name="l00234"></a>00234 cpl_polynomial_set_coeff(<span class="keyword">self</span>, °ree0, 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, °ree);
-<a name="l00272"></a>00272 cpl_polynomial_set_coeff(<span class="keyword">self</span>, °ree, 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 > 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>, °ree);
-<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>, °ree, 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>, °ree0, 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, °ree0);</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, °ree0);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> cpl_polynomial_set_coeff(<span class="keyword">self</span>, °ree0, 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>, °ree0, 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, °ree0);</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, °ree0);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> cpl_polynomial_set_coeff(<span class="keyword">self</span>, °ree0, 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, °ree);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> cpl_polynomial_set_coeff(<span class="keyword">self</span>, °ree, 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>, °ree);</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>, °ree, 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 > 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, °_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, °_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, °ree_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, °ree_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,°),
-<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,°),</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>, ¶meter[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>, ¶meter[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"> ¢re,&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"> ¢re,&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,¢re,&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,¢re,&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"> ¢re,&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"> ¢re,&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,¢re,&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,¢re,&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 '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> *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 '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, ...)
-<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(×) ;
-<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(×);
-<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(×) ;</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(×);</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(°x);
-<a name="l00681"></a>00681 sinfo_free_int(°y);
-<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(°x);
-<a name="l00694"></a>00694 sinfo_free_int(°y);
-<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(°x);</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> sinfo_free_int(°y);</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(°x);</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> sinfo_free_int(°y);</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 ¢ralLambda,
-<a name="l00312"></a>00312 ¢ralpix),
-<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 ¢ralLambda,
-<a name="l00331"></a>00331 ¢ralpix),
-<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 ¢ralLambda,
-<a name="l00349"></a>00349 ¢ralpix),
-<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(×) ;
-<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(×);
-<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> ¢ralLambda,</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> ¢ralpix),</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> ¢ralLambda,</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> ¢ralpix),</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> ¢ralLambda,</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> ¢ralpix),</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(×) ;</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(×);</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,¢ralWave,
-<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, ¢ralWave,
-<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,¢ralWave,</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, ¢ralWave,</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,¢re,&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,¢re,&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, °ree);
-<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, °ree);</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 ¶ms[i]->n_params,
-<a name="l00421"></a>00421 ¶ms[i]->column,
-<a name="l00422"></a>00422 ¶ms[i]->line,
-<a name="l00423"></a>00423 ¶ms[i]->wavelength,
-<a name="l00424"></a>00424 ¶ms[i]->fit_par[0],
-<a name="l00425"></a>00425 ¶ms[i]->fit_par[1],
-<a name="l00426"></a>00426 ¶ms[i]->fit_par[2],
-<a name="l00427"></a>00427 ¶ms[i]->fit_par[3],
-<a name="l00428"></a>00428 ¶ms[i]->derv_par[0],
-<a name="l00429"></a>00429 ¶ms[i]->derv_par[1],
-<a name="l00430"></a>00430 ¶ms[i]->derv_par[2],
-<a name="l00431"></a>00431 ¶ms[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> ¶ms[i]->n_params, </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> ¶ms[i]->column, </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> ¶ms[i]->line, </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> ¶ms[i]->wavelength, </div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> ¶ms[i]->fit_par[0], </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> ¶ms[i]->fit_par[1], </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> ¶ms[i]->fit_par[2], </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> ¶ms[i]->fit_par[3],</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> ¶ms[i]->derv_par[0], </div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> ¶ms[i]->derv_par[1], </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> ¶ms[i]->derv_par[2], </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> ¶ms[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(×);
-<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(×);</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>
 [...]
+ </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="" [...]
+<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