61#define MODULE_ID "XSH_FLUX"
81 cpl_image* ima_orig=NULL;
82 cpl_image* ima_warp=NULL;
83 cpl_image* ima_gaus=NULL;
84 cpl_image* ima_corr=NULL;
91 cpl_polynomial* poly_u=NULL;
92 cpl_polynomial* poly_v=NULL;
93 cpl_vector* xprofile=NULL;
94 cpl_vector* yprofile=NULL;
126 ima_orig=cpl_image_new(
nx,
ny,CPL_TYPE_FLOAT);
127 check(ima_gaus=cpl_image_new(sx,sy,CPL_TYPE_FLOAT));
129 check(cpl_image_fill_gaussian(ima_gaus,xc,yc,flux,sigx,sigy));
130 cpl_image_copy(ima_orig,ima_gaus,1*(
nx/4),1*(
ny/4));
132 check(cpl_image_fill_gaussian(ima_gaus,xc,yc,2*flux,sigx,sigy));
133 cpl_image_copy(ima_orig,ima_gaus,3*(
nx/4),1*(
ny/4));
135 check(cpl_image_fill_gaussian(ima_gaus,xc,yc,3*flux,sigx,sigy));
136 cpl_image_copy(ima_orig,ima_gaus,2*(
nx/4),2*(
ny/4));
138 check(cpl_image_fill_gaussian(ima_gaus,xc,yc,4*flux,sigx,sigy));
139 cpl_image_copy(ima_orig,ima_gaus,1*(
nx/4),3*(
ny/4));
141 check(cpl_image_fill_gaussian(ima_gaus,xc,yc,5*flux,sigx,sigy));
142 cpl_image_copy(ima_orig,ima_gaus,3*(
nx/4),3*(
ny/4));
145 cpl_image_save( ima_orig,
"ima_orig.fits", CPL_BPP_IEEE_FLOAT, NULL,
147 check(f_org=cpl_image_get_flux(ima_orig));
150 poly_u=cpl_polynomial_new(2);
151 poly_v=cpl_polynomial_new(2);
156 cpl_polynomial_set_coeff(poly_v,pows,
poly0_coeff[0]);
161 cpl_polynomial_set_coeff(poly_v,pows,
poly0_coeff[1]);
166 cpl_polynomial_set_coeff(poly_v,pows,
poly0_coeff[2]);
172 cpl_polynomial_set_coeff(poly_u,pows,1.);
190 cpl_polynomial_dump(poly_u,stdout);
191 cpl_polynomial_dump(poly_v,stdout);
194 check(ima_warp=cpl_image_new(
nx,
ny,CPL_TYPE_FLOAT));
195 check(xprofile=cpl_vector_new(
nx));
196 check(yprofile=cpl_vector_new(
ny));
197 cpl_vector_fill_kernel_profile(xprofile, CPL_KERNEL_DEFAULT,
198 CPL_KERNEL_DEF_WIDTH);
199 cpl_vector_fill_kernel_profile(yprofile, CPL_KERNEL_DEFAULT,
200 CPL_KERNEL_DEF_WIDTH);
202 check(cpl_image_warp_polynomial(ima_warp,ima_orig,poly_u,poly_v,
203 xprofile,CPL_KERNEL_DEF_WIDTH,
204 yprofile,CPL_KERNEL_DEF_WIDTH));
206 check(ima_corr=cpl_image_new(
nx,
ny,CPL_TYPE_FLOAT));
209 cpl_image_save( ima_warp,
"ima_warp.fits", CPL_BPP_IEEE_FLOAT, NULL,
211 check(f_new=cpl_image_get_flux(ima_warp));
212 xsh_msg(
"Flux start: %g",f_org);
218 check(dXdx=cpl_image_new(
nx,
ny,CPL_TYPE_FLOAT));
219 check(dYdy=cpl_image_new(
nx,
ny,CPL_TYPE_FLOAT));
220 check(dXdy=cpl_image_new(
nx,
ny,CPL_TYPE_FLOAT));
221 check(dYdx=cpl_image_new(
nx,
ny,CPL_TYPE_FLOAT));
223 check(pdXdx=cpl_image_get_data_float(dXdx));
224 check(pdYdy=cpl_image_get_data_float(dYdy));
225 check(pdXdy=cpl_image_get_data_float(dXdy));
226 check(pdYdx=cpl_image_get_data_float(dYdx));
227 check(pcor=cpl_image_get_data_float(ima_corr));
235 for(j=1;j<
ny-1;j++) {
236 for(i=1;i<
nx-1;i++) {
261 pcor[i+j*
nx]=fabs(pdXdx[i+j*
nx]*pdYdy[i+j*
nx]-
262 pdXdy[i+j*
nx]*pdYdx[i+j*
nx]);
268 cpl_image_save( ima_corr,
"ima_corr.fits", CPL_BPP_IEEE_FLOAT, NULL,
271 cpl_image_multiply(ima_warp,ima_corr);
273 cpl_image_save( ima_warp,
"ima_end.fits", CPL_BPP_IEEE_FLOAT, NULL,
277 check(f_new=cpl_image_get_flux(ima_warp));
278 xsh_msg(
"Flux corr: %g",f_new);
301 if (cpl_error_get_code() != CPL_ERROR_NONE) {
static double derivative_x(const double a1, const double a2, const double x)
static const double poly1_coeff[]
static double derivative_y(const double a1, const double a2, const double y)
static const double poly0_coeff[]
#define xsh_error_dump(level)
#define xsh_msg(...)
Print a message on info level.
void xsh_free_polynomial(cpl_polynomial **p)
Deallocate a polynomial and set the pointer to NULL.
void xsh_free_vector(cpl_vector **v)
Deallocate a vector and set the pointer to NULL.
void xsh_free_image(cpl_image **i)
Deallocate an image and set the pointer to NULL.
#define TESTS_CLEAN_WORKSPACE(DRL_ID)
#define TESTS_INIT_WORKSPACE(DRL_ID)
#define TESTS_INIT(DRL_ID)