21#ifndef ERISP_ERIS_ERIS_IFU_EXTRACT_SPEC_STATIC_H_
22#define ERISP_ERIS_ERIS_IFU_EXTRACT_SPEC_STATIC_H_
37#include "eris_ifu_functions.h"
38#include "eris_ifu_vector.h"
44typedef enum {MASK, POSITION, MAX, FIT, OPTIMAL} mask_method_types;
46 mask_method_types mask_method;
50 productDepthType productDepth;
59 cpl_propertylist *header;
60 cpl_imagelist *qualImagelist;
61 deqQualityType qualityType;
73void eris_ifu_extract_free_esSofStruct(
struct esSofStruct* self);
75hdrl_image* eris_ifu_extract_spec_collapse(hdrl_imagelist *cube,
76 cpl_image **contribute);
78cpl_image* eris_ifu_extract_spec_create_fit_mask(
const hdrl_image *img);
80cpl_image* eris_ifu_extract_spec_create_circle_mask(
87cpl_image* eris_ifu_extract_spec_create_mask(
struct esParamStruct params,
88 struct esSofStruct sof,
89 const hdrl_image *collapsedCube,
92cpl_bivector* eris_ifu_extract_spectrum(
98 cpl_vector **totalFlux);
116cpl_bivector* eris_ifu_optimal_extraction(
const hdrl_imagelist *cube,
117 const cpl_imagelist *cube_dqi,
118 const cpl_image *img_mask,
122 cpl_vector **error_out);
124cpl_error_code eris_ifu_opt_extr_get_center_fwhm(
const hdrl_image *hdrl_img,
130cpl_mask* eris_ifu_opt_extr_create_mask(
int nx,
136cpl_error_code eris_ifu_opt_extr_simple_extraction(
const hdrl_imagelist *cube,
137 const cpl_mask *mask,
139 cpl_vector **spec_var);
141cpl_bivector * eris_ifu_opt_extr_helper_usepix(
const cpl_mask *mask,
int *n_usepix);
143cpl_error_code eris_ifu_opt_extr_helper_fill_vertical(cpl_image *img,
const eris_ifu_vector *vec);
145void eris_ifu_opt_extr_helper_fill_horizontal(cpl_image *img,
const cpl_image *slice,
const cpl_bivector *usepix,
int row,
int power);
147void eris_ifu_opt_extr_helper_set_positive(cpl_image *img);
149cpl_vector* eris_ifu_opt_extr_get_col(
const cpl_image *img,
int colnr);
151cpl_vector *eris_ifu_opt_extr_get_row(
const cpl_image *img,
int rownr);
153cpl_error_code eris_ifu_opt_extr_set_row(cpl_image *img,
155 const cpl_vector *vec);
157cpl_error_code eris_ifu_opt_extr_set_col(cpl_image *img,
159 const cpl_vector *vec);
161cpl_vector* eris_ifu_opt_extr_create_lambda(
int size,
165cpl_error_code eris_ifu_opt_extr_vector_sqrt(cpl_vector *vec);
167cpl_bivector* eris_ifu_opt_extr_doit(
const hdrl_imagelist *cube,
168 const cpl_imagelist *cube_dqi,
169 const cpl_mask *mask,
170 const eris_ifu_vector *spec,
171 const eris_ifu_vector *spec_var,
175 cpl_vector **error_out);
177int eris_ifu_opt_extr_get_not_finite(cpl_vector *vec);
179void eris_ifu_opt_extr_convert_0_to_NaN_vec(cpl_vector *vec);
181double eris_ifu_opt_extr_estimate_radius(
const cpl_image *img,
184 double initial_radius,
189cpl_error_code eris_ifu_cpl_vector_sqrt(cpl_vector *vec);