ERIS Pipeline Reference Manual 1.8.10
eris_ifu_distortion_static.h
1/* $Id$
2 *
3 * This file is part of the ERIS Pipeline
4 * Copyright (C) 2002,2003 European Southern Observatory
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef ERISP_ERIS_ERIS_IFU_DISTORTION_STATIC_H_
22#define ERISP_ERIS_ERIS_IFU_DISTORTION_STATIC_H_
23
24#ifdef HAVE_CONFIG_H
25#include <config.h>
26#endif
27
28#include <cpl.h>
29#include <hdrl.h>
30
31#include "eris_ifu_functions.h"
32#include "eris_ifu_vector.h"
33#include "eris_ifu_constants.h"
34
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"
43
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"
50
51#define ERIS_IFU_DIST_DBG_FN "eris_ifu_distortion_dbg_dist_row_est_cen_fit_cen.fits"
52
53struct arcstruct {
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;
59};
60
61cpl_vector* eris_ifu_dist_calc_centers_profile(const cpl_vector* profile,
62 cpl_boolean lowerCutLevel);
63
64cpl_error_code eris_ifu_dist_calc_centers_copy(const cpl_vector *fit_centers,
65 int y_index,
66 double y_value,
67 cpl_table **cen_array);
68
69cpl_table **eris_ifu_dist_calc_centers(const hdrl_image *fibre_div,
70 const hdrl_image *fibre_on,
71 int productDepth);
72
73cpl_vector* eris_ifu_dist_estimate_low_slitlet(const cpl_vector *est_centers);
74
75cpl_vector* eris_ifu_dist_calc_centers_fit(const cpl_vector *profile,
76 const cpl_vector *est_centers,
77 cpl_boolean do_fix_cnt);
78
79int eris_ifu_distortion_calc_y(int n, int i);
80
81int eris_ifu_distortion_target_left_edge(int i);
82
83int eris_ifu_distortion_target_right_edge(int i);
84
85int eris_ifu_distortion_get_narcs(int i, cpl_boolean triple_traces ,
86 cpl_boolean cut_off_left,
87 cpl_boolean cut_off_right);
88
89cpl_polynomial** eris_ifu_dist_calc_distortion(cpl_table **slit_edges,
90 cpl_table **centers,
91 int productDepth,
92 cpl_boolean cut_off_left,
93 cpl_boolean cut_off_right,
94 cpl_table **minmax_borders,
95 cpl_propertylist ***qc,
96 cpl_propertylist *pl,
97 cpl_frameset* frameset,
98 const cpl_parameterlist* parlist);
99
100cpl_polynomial** eris_ifu_dist_calc_distortion_full(cpl_table **slit_edges,
101 cpl_table **centers,
102 int productDepth,
103 cpl_boolean cut_off_left,
104 cpl_boolean cut_off_right);
105
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,
109 int n_calib_arc,
110 int n_size,
111 int fit_order,
112 int slitlet,
113 cpl_table *dbg_tbl);
114
115cpl_error_code eris_ifu_dist_calc_distortion_fillgrid(cpl_bivector *grid,
116 const eris_ifu_vector *data,
117 cpl_vector *val_to_fit,
118 double x_pos,
119 int n_size,
120 int arc_cnt);
121
122cpl_polynomial* eris_ifu_dist_poly_fit_2d_create(cpl_bivector *xy_pos,
123 const cpl_vector *values,
124 double *msee);
125
126cpl_error_code eris_ifu_dist_save_distortion(cpl_polynomial **poly2d,
127 const cpl_table *minmax_borders,
128 const char *fn,
129 cpl_frameset *frameset,
130 const cpl_parameterlist *parlist,
131 cpl_propertylist **qc);
132
133hdrl_image *eris_ifu_dist_warp_image_full(const hdrl_image *hdrl_img_in,
134 cpl_polynomial **poly_u,
135 int productDepth);
136
137hdrl_image* eris_ifu_dist_warp_slitlet(const hdrl_image *imgIn,
138 const cpl_polynomial *poly_u,
139 const cpl_polynomial *poly_v,
140 double l_min,
141 double r_max,
142 int slitletNr);
143
144hdrl_image* eris_ifu_dist_warp_image(const hdrl_image *imgIn,
145 cpl_polynomial **poly_u,
146 const cpl_table *borders);
147
148hdrl_image* eris_ifu_dist_warp_bpm(const hdrl_image *bpmIn,
149 cpl_polynomial **poly_u,
150 const cpl_table *borders,
151 productDepthType productDepth);
152
153hdrl_imagelist* eris_ifu_stack_warped(const hdrl_image *imgIn,
154 const int *rowIndices);
155
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);
161
162cpl_error_code eris_ifu_image_add_slit(hdrl_image *imgFull,
163 const hdrl_image *imgSlit,
164 int offset);
165
166cpl_table **eris_ifu_dist_calc_slitpos(cpl_image **arcImg,
167 cpl_table **centers_array,
168 cpl_table *valid_arc_lines,
169 int productDepth,
170 cpl_boolean *cut_off_left,
171 cpl_boolean *cut_off_right,
172 const cpl_frameset* frameset,
173 const cpl_parameterlist* parlist);
174
175cpl_error_code eris_ifu_fit_gauss(const cpl_vector *x,
176 const cpl_vector *y,
177 double *x0,
178 double *sigma,
179 double *area,
180 double *offset);
181
182cpl_vector* eris_ifu_polyfit_edge(const eris_ifu_vector *x,
183 const eris_ifu_vector *y,
184 int fit_order);
185
186cpl_error_code eris_ifu_distortion_reduce_lines(cpl_table *tbl,
187 ifsBand band,
188 int nr_cols);
189
190cpl_error_code eris_ifu_distortion_reduce_identical_lines(cpl_table *tbl);
191
192cpl_table *eris_ifu_dist_wave(cpl_frameset *fs,
193 cpl_table **centers_fitted,
194 int productDepth,
195 cpl_image ***arcImgs,
196 int *arcImgCnt,
197 const cpl_parameterlist* parlist,
198 cpl_table** qclog);
199
200cpl_error_code eris_ifu_wavecal_processSof_dist(cpl_frameset* frames,
201 int exposureCorrectionMode,
202 int *arcImgCnt,
203 hdrl_imagelist **arcImages,
204 int **lampStates,
205 ifsBand *band,
206 ifsPreopticsScale *scale,
207 ifsInstrument *instrument,
208 double saturation_threshold,
209 cpl_table** qclog);
210
211#endif /* ERISP_ERIS_ERIS_IFU_DISTORTION_STATIC_H_ */