75 const char* blaze_name = NULL;
76 cpl_image *blaze_img = NULL;
77 cpl_frame *result_frame = NULL;
82 const char* tag = NULL;
89 check( tag = cpl_frame_get_tag( pre_frame));
90 check( blaze_name = cpl_frame_get_filename( blaze_frame));
91 check( blaze_img = cpl_image_load( blaze_name, CPL_TYPE_FLOAT,0,0));
93 check( data1 = cpl_image_get_data_float( pre->
data));
94 check( errs1 = cpl_image_get_data_float( pre->
errs));
95 check( data2 = cpl_image_get_data_float( blaze_img));
97 for(i=0;i< pre->
nx*pre->
ny; i++){
103 double d1 = 0.0, d2 = 0.0;
108 data1[i] = (float)(d1/d2);
109 errs1[i] = (float)(e1/d2);
114 check( cpl_frame_set_tag ( result_frame, tag));
120 if ( cpl_error_get_code() != CPL_ERROR_NONE){
146 cpl_image *result_img = NULL;
147 cpl_frame *result_frame = NULL;
149 char blaze_name[256];
157 sprintf( blaze_name,
"%s",
"BLAZE_IMAGE.fits");
158 sprintf(blaze_tag,
"%s",
"BLAZE");
164 check( cpl_image_save( result_img, blaze_name,
165 CPL_BPP_IEEE_FLOAT, NULL,CPL_IO_DEFAULT));
167 check( result_frame = cpl_frame_new());
168 check( cpl_frame_set_filename( result_frame, blaze_name));
169 check( cpl_frame_set_tag( result_frame, blaze_tag));
175 if ( cpl_error_get_code() != CPL_ERROR_NONE){
200 xsh_pre *masterflat_pre = NULL;
201 float *masterflat_data = NULL;
202 cpl_image *result = NULL;
203 float *result_data = NULL;
204 int i, iorder,
y,
nx,
ny;
205 cpl_vector *cen_flux_vect = NULL, *cen_flux_pos_vect = NULL;
206 double *cen_flux_pos = NULL, *cen_flux = NULL;
219 check(
nx = cpl_image_get_size_x( masterflat_pre->
data));
220 check(
ny = cpl_image_get_size_y( masterflat_pre->
data));
221 check( masterflat_data = cpl_image_get_data_float( masterflat_pre->
data));
225 check( result = cpl_image_new(
nx,
ny, CPL_TYPE_FLOAT));
226 check( result_data = cpl_image_get_data_float( result));
229 for( iorder= 0; iorder < order_list->
size; iorder++) {
239 for(
y=start_y;
y <= end_y;
y++){
242 cen_flux[
y-start_y] = masterflat_data[(x_cen-1)+(
y-1)*
nx];
243 cen_flux_pos[
y-start_y] = (double)
y;
247 check( cen_flux_vect = cpl_vector_wrap( size_y, cen_flux));
248 check( cen_flux_pos_vect = cpl_vector_wrap( size_y, cen_flux_pos));
252 cen_flux_vect, deg_poly, &mse));
253 xsh_msg_dbg_medium(
"Polynomial blaze fitting for order %d with mse %f", absorder, mse);
257 xsh_msg(
"Not good mse %f Decrease deg poly to %d",mse, deg_poly);
261 cen_flux_vect, deg_poly, &mse));
266 FILE* regdebug = NULL;
269 sprintf(filename,
"blaze_%d.dat",absorder);
270 regdebug = fopen(filename,
"w");
272 fprintf( regdebug,
"# y flux poly\n");
274 for(
y=0;
y< size_y;
y++){
277 check( flux_cen_val = cpl_polynomial_eval_1d(
279 fprintf(regdebug,
"%f %f %f\n", cen_flux_pos[
y], cen_flux[
y], flux_cen_val);
286 for(
y=start_y;
y <= end_y;
y++){
294 check( flux_cen_val = cpl_polynomial_eval_1d(
297 for( i=x_min; i<= x_max; i++){
298 result_data[i-1+(
y-1)*
nx] = flux_cen_val;
308 check( cpl_image_save( result,
"BLAZE_IMAGE.fits",
309 CPL_BPP_IEEE_FLOAT, NULL,CPL_IO_DEFAULT));
314 if ( cpl_error_get_code() != CPL_ERROR_NONE){
static xsh_instrument * instrument
cpl_frame * xsh_divide_by_blaze(cpl_frame *pre_frame, cpl_frame *blaze_frame, xsh_instrument *instrument)
Divide a pre image by the blaze image.
cpl_image * xsh_create_blaze(cpl_frame *masterflat_frame, xsh_order_list *order_list, xsh_instrument *instrument)
Normalize a master flat frame order by order.
cpl_frame * xsh_blaze_image(cpl_frame *masterflat_frame, cpl_frame *order_frame, xsh_instrument *instrument)
Normalize a master flat frame order by order.
int xsh_order_list_eval_int(xsh_order_list *list, cpl_polynomial *poly, double y)
Evaluate an order list poly but return the central pixel position rounding the polynomial.
xsh_order_list * xsh_order_list_load(cpl_frame *frame, xsh_instrument *instr)
load an order list from a frame
int xsh_order_list_get_starty(xsh_order_list *list, int i)
get position on Y axis of first pixel detected on order
int xsh_order_list_get_endy(xsh_order_list *list, int i)
get position on Y axis of last pixel detected on order
void xsh_order_list_free(xsh_order_list **list)
free memory associated to an order_list
xsh_pre * xsh_pre_load(cpl_frame *frame, xsh_instrument *instr)
Load a xsh_pre structure from a frame.
void xsh_pre_free(xsh_pre **pre)
Free a xsh_pre structure.
cpl_frame * xsh_pre_save(const xsh_pre *pre, const char *filename, const char *tag, int temp)
Save PRE on disk.
#define XSH_CMP_INT(A, OPERATOR, B, SUFFIX,...)
#define XSH_ASSURE_NOT_NULL(pointer)
#define xsh_msg_dbg_medium(...)
#define xsh_msg(...)
Print a message on info level.
void xsh_unwrap_vector(cpl_vector **v)
Unwrap a vector and set the pointer to NULL.
void xsh_free_polynomial(cpl_polynomial **p)
Deallocate a polynomial and set the pointer to NULL.
void xsh_free_image(cpl_image **i)
Deallocate an image and set the pointer to NULL.
void xsh_free_frame(cpl_frame **f)
Deallocate a frame and set the pointer to NULL.
cpl_polynomial * edguppoly
cpl_polynomial * blazepoly
cpl_polynomial * edglopoly
#define XSH_FREE(POINTER)
#define XSH_MALLOC(POINTER, TYPE, SIZE)
cpl_polynomial * xsh_polynomial_fit_1d_create(const cpl_vector *x_pos, const cpl_vector *values, int degree, double *mse)