21#ifndef ERISP_ERIS_ERIS_IFU_DISTORTION_STATIC_H_
22#define ERISP_ERIS_ERIS_IFU_DISTORTION_STATIC_H_
31#include "eris_ifu_functions.h"
32#include "eris_ifu_vector.h"
33#include "eris_ifu_constants.h"
35#define NS_EST_SLIT_DIST 60
36#define NS_FIT_DEGREE 3
37#define ERIS_IFU_DIST_SLIT "slit_width"
38#define ERIS_IFU_DIST_YPOS "y_pos"
39#define ERIS_IFU_DIST_EDGE_L "edge_left"
40#define ERIS_IFU_DIST_EDGE_R "edge_right"
41#define ERIS_IFU_POLY_EDGE_L "l_min"
42#define ERIS_IFU_POLY_EDGE_R "r_max"
44#define ERIS_IFU_DIST_DBG_SLITLET "slitlet"
45#define ERIS_IFU_DIST_DBG_EDGE_LEFT "edge_left"
46#define ERIS_IFU_DIST_DBG_EDGE_RIGHT "edge_right"
47#define ERIS_IFU_DIST_DBG_CENTER "x"
48#define ERIS_IFU_DIST_DBG_CENTER_LEFT "x_l"
49#define ERIS_IFU_DIST_DBG_CENTER_RIGHT "x_r"
51#define ERIS_IFU_DIST_DBG_FN "eris_ifu_distortion_dbg_dist_row_est_cen_fit_cen.fits"
54 eris_ifu_vector *fit_l;
55 eris_ifu_vector *fit_c_l;
56 eris_ifu_vector *fit_c;
57 eris_ifu_vector *fit_c_r;
58 eris_ifu_vector *fit_r;
61cpl_vector* eris_ifu_dist_calc_centers_profile(
const cpl_vector* profile,
62 cpl_boolean lowerCutLevel);
64cpl_error_code eris_ifu_dist_calc_centers_copy(
const cpl_vector *fit_centers,
67 cpl_table **cen_array);
69cpl_table **eris_ifu_dist_calc_centers(
const hdrl_image *fibre_div,
70 const hdrl_image *fibre_on,
73cpl_vector* eris_ifu_dist_estimate_low_slitlet(
const cpl_vector *est_centers);
75cpl_vector* eris_ifu_dist_calc_centers_fit(
const cpl_vector *profile,
76 const cpl_vector *est_centers,
77 cpl_boolean do_fix_cnt);
79int eris_ifu_distortion_calc_y(
int n,
int i);
81int eris_ifu_distortion_target_left_edge(
int i);
83int eris_ifu_distortion_target_right_edge(
int i);
85int eris_ifu_distortion_get_narcs(
int i, cpl_boolean triple_traces ,
86 cpl_boolean cut_off_left,
87 cpl_boolean cut_off_right);
89cpl_polynomial** eris_ifu_dist_calc_distortion(cpl_table **slit_edges,
92 cpl_boolean cut_off_left,
93 cpl_boolean cut_off_right,
94 cpl_table **minmax_borders,
95 cpl_propertylist ***qc,
97 cpl_frameset* frameset,
98 const cpl_parameterlist* parlist);
100cpl_polynomial** eris_ifu_dist_calc_distortion_full(cpl_table **slit_edges,
103 cpl_boolean cut_off_left,
104 cpl_boolean cut_off_right);
106eris_ifu_vector *eris_ifu_dist_calc_distortion_fitedge(
const cpl_table *slit_edges,
107 const char *col_name,
108 const eris_ifu_vector *y_arc,
115cpl_error_code eris_ifu_dist_calc_distortion_fillgrid(cpl_bivector *grid,
116 const eris_ifu_vector *data,
117 cpl_vector *val_to_fit,
122cpl_polynomial* eris_ifu_dist_poly_fit_2d_create(cpl_bivector *xy_pos,
123 const cpl_vector *values,
126cpl_error_code eris_ifu_dist_save_distortion(cpl_polynomial **poly2d,
127 const cpl_table *minmax_borders,
129 cpl_frameset *frameset,
130 const cpl_parameterlist *parlist,
131 cpl_propertylist **qc);
133hdrl_image *eris_ifu_dist_warp_image_full(
const hdrl_image *hdrl_img_in,
134 cpl_polynomial **poly_u,
137hdrl_image* eris_ifu_dist_warp_slitlet(
const hdrl_image *imgIn,
138 const cpl_polynomial *poly_u,
139 const cpl_polynomial *poly_v,
144hdrl_image* eris_ifu_dist_warp_image(
const hdrl_image *imgIn,
145 cpl_polynomial **poly_u,
146 const cpl_table *borders);
148hdrl_image* eris_ifu_dist_warp_bpm(
const hdrl_image *bpmIn,
149 cpl_polynomial **poly_u,
150 const cpl_table *borders,
151 productDepthType productDepth);
153hdrl_imagelist* eris_ifu_stack_warped(
const hdrl_image *imgIn,
154 const int *rowIndices);
156cpl_error_code eris_ifu_dist_warp_stats(
const hdrl_image *hdrlWarpedImg,
157 cpl_propertylist *qc_list,
158 cpl_propertylist *pl,
159 cpl_frameset* frameset,
160 const cpl_parameterlist* parlist);
162cpl_error_code eris_ifu_image_add_slit(hdrl_image *imgFull,
163 const hdrl_image *imgSlit,
166cpl_table **eris_ifu_dist_calc_slitpos(cpl_image **arcImg,
167 cpl_table **centers_array,
168 cpl_table *valid_arc_lines,
170 cpl_boolean *cut_off_left,
171 cpl_boolean *cut_off_right,
172 const cpl_frameset* frameset,
173 const cpl_parameterlist* parlist);
175cpl_error_code eris_ifu_fit_gauss(
const cpl_vector *x,
182cpl_vector* eris_ifu_polyfit_edge(
const eris_ifu_vector *x,
183 const eris_ifu_vector *y,
186cpl_error_code eris_ifu_distortion_reduce_lines(cpl_table *tbl,
190cpl_error_code eris_ifu_distortion_reduce_identical_lines(cpl_table *tbl);
192cpl_table *eris_ifu_dist_wave(cpl_frameset *fs,
193 cpl_table **centers_fitted,
195 cpl_image ***arcImgs,
197 const cpl_parameterlist* parlist,
200cpl_error_code eris_ifu_wavecal_processSof_dist(cpl_frameset* frames,
201 int exposureCorrectionMode,
203 hdrl_imagelist **arcImages,
206 ifsPreopticsScale *scale,
207 ifsInstrument *instrument,
208 double saturation_threshold,