93 #include <uves_physmod_center_gauss.h>
95 #include <uves_physmod_cstacen.h>
96 #include <uves_utils_wrappers.h>
97 #include <uves_error.h>
172 double* x_start=NULL;
173 double* y_start=NULL;
206 int cpix[5]={0,0,0,0,0};
207 double STEP[3]={1.0,1.0,1.0};
211 cpl_image* img_sub=NULL;
212 cpl_image* img_cst=NULL;
220 check(nraw = cpl_table_get_nrow(*m_tbl),
"Error getting nraw");
222 cpl_table_new_column(*m_tbl,
"XCEN",CPL_TYPE_DOUBLE);
223 cpl_table_new_column(*m_tbl,
"YCEN",CPL_TYPE_DOUBLE);
224 cpl_table_new_column(*m_tbl,
"ICENT",CPL_TYPE_DOUBLE);
225 cpl_table_new_column(*m_tbl,
"XSIG",CPL_TYPE_DOUBLE);
226 cpl_table_new_column(*m_tbl,
"YSIG",CPL_TYPE_DOUBLE);
227 cpl_table_new_column(*m_tbl,
"XFWHM",CPL_TYPE_DOUBLE);
228 cpl_table_new_column(*m_tbl,
"YFWHM",CPL_TYPE_DOUBLE);
229 cpl_table_new_column(*m_tbl,
"XERR",CPL_TYPE_DOUBLE);
230 cpl_table_new_column(*m_tbl,
"YERR",CPL_TYPE_DOUBLE);
233 icent = cpl_table_get_data_double(*m_tbl,
"ICENT");
235 x_mod = cpl_table_get_data_double(*m_tbl,
"XMOD");
236 y_mod = cpl_table_get_data_double(*m_tbl,
"YMOD");
237 x_err = cpl_table_get_data_double(*m_tbl,
"XERR");
238 y_err = cpl_table_get_data_double(*m_tbl,
"YERR");
240 x_start = cpl_table_get_data_double(*m_tbl,
"XSTART");
241 y_start = cpl_table_get_data_double(*m_tbl,
"YSTART");
242 x_end = cpl_table_get_data_double(*m_tbl,
"XEND");
243 y_end = cpl_table_get_data_double(*m_tbl,
"YEND");
245 x_cen = cpl_table_get_data_double(*m_tbl,
"XCEN");
246 y_cen = cpl_table_get_data_double(*m_tbl,
"YCEN");
247 x_sig = cpl_table_get_data_double(*m_tbl,
"XSIG");
248 y_sig = cpl_table_get_data_double(*m_tbl,
"YSIG");
249 x_fwhm = cpl_table_get_data_double(*m_tbl,
"XFWHM");
250 y_fwhm = cpl_table_get_data_double(*m_tbl,
"YFWHM");
253 cpl_table_new_column(*m_tbl,
"STATUS",CPL_TYPE_INT);
254 check_nomsg( cpl_table_set_column_invalid(*m_tbl,
"STATUS",0,
255 cpl_table_get_nrow(*m_tbl)));
257 cpl_table_set_column_invalid(*m_tbl,
"ICENT",0,
258 cpl_table_get_nrow(*m_tbl));
260 cpl_table_set_column_invalid(*m_tbl,
"XCEN",0,
261 cpl_table_get_nrow(*m_tbl));
262 cpl_table_set_column_invalid(*m_tbl,
"YCEN",0,
263 cpl_table_get_nrow(*m_tbl));
265 cpl_table_set_column_invalid(*m_tbl,
"XSIG",0,
266 cpl_table_get_nrow(*m_tbl));
267 cpl_table_set_column_invalid(*m_tbl,
"YSIG",0,
268 cpl_table_get_nrow(*m_tbl));
270 cpl_table_set_column_invalid(*m_tbl,
"XFWHM",0,
271 cpl_table_get_nrow(*m_tbl));
272 cpl_table_set_column_invalid(*m_tbl,
"YFWHM",0,
273 cpl_table_get_nrow(*m_tbl));
279 for(i=0;i<nraw;i++) {
281 px_start=cpl_table_get_double(*m_tbl,
"XSTART",i,&status);
282 py_start=cpl_table_get_double(*m_tbl,
"YSTART",i,&status);
283 px_end=cpl_table_get_double(*m_tbl,
"XEND",i,&status);
284 py_end=cpl_table_get_double(*m_tbl,
"YEND",i,&status);
287 img_llx=floor(px_start+0.5);
288 img_lly=floor(py_start+0.5);
289 img_urx=floor(px_end+0.5);
290 img_ury=floor(py_end+0.5);
292 img_szx=cpl_image_get_size_x(raw_image);
293 img_szy=cpl_image_get_size_y(raw_image);
300 if(img_llx < 1 || img_urx > img_szx ||
301 img_lly < 1 || img_ury > img_szy) {
315 img_sx=img_urx-img_llx+1;
316 img_sy=img_ury-img_lly+1;
332 uves_msg_debug(
"Box %d %d %d %d %d",nf,img_llx,img_urx,img_lly,img_ury);
339 uves_free_image(&img_sub);
340 img_sub =cpl_image_extract(raw_image,img_llx,img_lly,img_urx,img_ury);
341 uves_free_image(&img_cst);
342 img_cst = cpl_image_cast(img_sub,CPL_TYPE_FLOAT);
343 sima = cpl_image_get_data_float(img_cst);
351 uves_msg_debug(
"stacen nf=%d cpix=%d %d %d %d",nf,cpix[0],cpix[1],cpix[2],cpix[3]);
353 &xout,&yout,&xerr,&yerr,&xsig,&ysig,&,&kstat);
355 uves_msg_debug(
"nf=%d,xout=%f,yout=%f,xerr=%f,yerr=%f",nf,xout,yout,xerr,yerr);
356 uves_msg_debug(
"xsig=%f,ysig=%f,xfwhm=%f,yfwhm=%f",xsig,ysig,xfwhm,yfwhm);
366 uves_msg(
"Min=%f,Max=%f",cpl_image_get_min(img_sub),
367 cpl_image_get_max(img_sub));
368 uves_msg(
"llx=%d,lly=%d,urx=%d,ury=%d",img_llx,img_lly,img_urx,img_ury);
369 uves_msg(
"sx=%d,sy=%d,ofx=%d,ofy=%d",img_sx,img_sy,img_ofx,img_ofy);
370 uves_msg(
"img_sx=%d,img_sy=%d,cpix[0]=%d,cpix[1]=%d,cpix[2]=%d,cpix[3]=%d",
371 img_sx,img_sy,cpix[0],cpix[1],cpix[2],cpix[3]);
373 uves_msg(
"i=%d,xout=%f,yout=%f,xerr=%f,yerr=%f",nf,xout,yout,xerr,yerr);
374 uves_msg(
"xsig=%f,ysig=%f,xfwhm=%f,yfwhm=%f,amp=%f,kstat=%d",xsig,ysig,xfwhm,yfwhm,amp,kstat);
381 xerr=xerr*fabs(STEP[1]);
382 xsig=xsig*fabs(STEP[1]);
383 xfwhm=xsig*TWOSQRT2LN2;
385 yerr=yerr*fabs(STEP[2]);
386 ysig=ysig*fabs(STEP[2]);
387 yfwhm=ysig*TWOSQRT2LN2;
389 tmp_val=cpl_table_get_double(*m_tbl,
"IDENT",i,&status);
407 uves_msg_debug(
"nf=%d %f %f %f %f %f %d",nf,xout,yout,xsig,ysig,amp,kstat);
413 if( (xfwhm > img_sx *fabs(STEP[1])) || (yfwhm > img_sy *fabs(STEP[2])) ) {
416 if ( (xfwhm < 0.0) || (yfwhm < 0.0) ) {
424 uves_msg(
"Min=%f,Max=%f",cpl_image_get_min(img_sub),
425 cpl_image_get_max(img_sub));
426 uves_msg(
"llx=%d,lly=%d,urx=%d,ury=%d",img_llx,img_lly,img_urx,img_ury);
427 uves_msg(
"sx=%d,sy=%d,ofx=%d,ofy=%d",img_sx,img_sy,img_ofx,img_ofy);
428 uves_msg(
"img_sx=%d,img_sy=%d,cpix[0]=%d,cpix[1]=%d,cpix[2]=%d,cpix[3]=%d",
429 img_sx,img_sy,cpix[0],cpix[1],cpix[2],cpix[3]);
431 uves_msg(
"i=%d,xout=%f,yout=%f,xerr=%f,yerr=%f",i,xout,yout,xerr,yerr);
432 uves_msg(
"xsig=%f,ysig=%f,xfwhm=%f,yfwhm=%f,amp=%f,kstat=%d",xsig,ysig,xfwhm,yfwhm,amp,kstat);
437 cpl_table_set_double(*m_tbl,
"IDENT",i,tmp_val);
438 cpl_table_set_double(*m_tbl,
"ICENT",i,(
double)amp);
439 cpl_table_set_double(*m_tbl,
"XERR",i,(
double)xerr);
440 cpl_table_set_double(*m_tbl,
"YERR",i,(
double)yerr);
442 cpl_table_set_double(*m_tbl,
"XCEN",i,(
double)(xout+img_ofx));
443 cpl_table_set_double(*m_tbl,
"YCEN",i,(
double)(yout+img_ofy));
444 cpl_table_set_double(*m_tbl,
"XSIG",i,(
double)xsig);
445 cpl_table_set_double(*m_tbl,
"YSIG",i,(
double)ysig);
446 cpl_table_set_double(*m_tbl,
"XFWHM",i,(
double)xfwhm);
447 cpl_table_set_double(*m_tbl,
"YFWHM",i,(
double)yfwhm);
448 cpl_table_set_int (*m_tbl,
"STATUS",i,kstat);
455 cpl_table *dum = cpl_table_new(cpl_table_get_nrow(*m_tbl));
457 cpl_table_duplicate_column(dum,
"STAT",*m_tbl,
"STATUS");
468 uves_msg_warning(
"status = %f", cpl_table_get_column_mean(*m_tbl,
"STATUS"));
476 uves_free_image(&img_sub);
477 uves_free_image(&img_cst);
#define uves_msg_warning(...)
Print an warning message.
int uves_physmod_stacen(float *p_img, int dimx, int dimy, char meth, int *image, float *xout, float *yout, float *xerr, float *yerr, float *xsig, float *ysig, float *xyval, int *stat)
Routines used to do Gaussian fit to a line.
#define uves_msg(...)
Print a message on 'info' or 'debug' level.
int uves_physmod_center_gauss(const cpl_image *raw_image, cpl_table **m_tbl)
Fit the image line X and Y distributions with a Gaussian in a box.
#define uves_msg_debug(...)
Print a debug message.