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,
99 cpl_vector **quality);
117cpl_bivector* eris_ifu_optimal_extraction(
const hdrl_imagelist *cube,
118 const cpl_imagelist *cube_dqi,
119 const cpl_image *img_mask,
123 cpl_vector **error_out);
125cpl_error_code eris_ifu_opt_extr_get_center_fwhm(
const hdrl_image *hdrl_img,
131cpl_mask* eris_ifu_opt_extr_create_mask(
int nx,
137cpl_error_code eris_ifu_opt_extr_simple_extraction(
const hdrl_imagelist *cube,
138 const cpl_mask *mask,
140 cpl_vector **spec_var);
142cpl_bivector * eris_ifu_opt_extr_helper_usepix(
const cpl_mask *mask,
int *n_usepix);
144cpl_error_code eris_ifu_opt_extr_helper_fill_vertical(cpl_image *img,
const eris_ifu_vector *vec);
146void eris_ifu_opt_extr_helper_fill_horizontal(cpl_image *img,
const cpl_image *slice,
const cpl_bivector *usepix,
int row,
int power);
148void eris_ifu_opt_extr_helper_set_positive(cpl_image *img);
150cpl_vector* eris_ifu_opt_extr_get_col(
const cpl_image *img,
int colnr);
152cpl_vector *eris_ifu_opt_extr_get_row(
const cpl_image *img,
int rownr);
154cpl_error_code eris_ifu_opt_extr_set_row(cpl_image *img,
156 const cpl_vector *vec);
158cpl_error_code eris_ifu_opt_extr_set_col(cpl_image *img,
160 const cpl_vector *vec);
162cpl_vector* eris_ifu_opt_extr_create_lambda(
int size,
166cpl_error_code eris_ifu_opt_extr_vector_sqrt(cpl_vector *vec);
168cpl_bivector* eris_ifu_opt_extr_doit(
const hdrl_imagelist *cube,
169 const cpl_imagelist *cube_dqi,
170 const cpl_mask *mask,
171 const eris_ifu_vector *spec,
172 const eris_ifu_vector *spec_var,
176 cpl_vector **error_out);
178int eris_ifu_opt_extr_get_not_finite(cpl_vector *vec);
180void eris_ifu_opt_extr_convert_0_to_NaN_vec(cpl_vector *vec);
182double eris_ifu_opt_extr_estimate_radius(
const cpl_image *img,
185 double initial_radius,
190cpl_error_code eris_ifu_cpl_vector_sqrt(cpl_vector *vec);