113 casu_fits *conf, casu_fits *objmaskfits,
114 int nfiles, casu_fits **skyout, casu_fits **skyvar,
116 cpl_wcs *wcsmask,*wcsimg;
117 unsigned char **masks,*sky_bpm;
118 cpl_image *im,*skyim,*skyimv;
119 double *xin = NULL, *yin = NULL, *xout = NULL, *yout = NULL, *dx = NULL, *dy = NULL, ddx, ddy;
120 int nx,ny,npts,ind,i,j,kind,ix,iy,jx,jy,*opm = NULL;
122 int nfiles2, *confdata = NULL;
123 float **datas,*sky,*skyv,*zeros,val,sig,**vars;
124 cpl_propertylist *plist;
125 casu_fits **infiles2,**invar2;
126 const char *fctid =
"casu_pawsky_minus";
132 if (*status != CASU_OK)
138 cpl_msg_error(fctid,
"Sky correction impossible. No science frames");
144 infiles2 = cpl_malloc(nfiles*
sizeof(casu_fits *));
146 invar2 = cpl_malloc(nfiles*
sizeof(casu_fits *));
150 for (i = 0; i < nfiles; i++) {
152 infiles2[nfiles2] = infiles[i];
154 invar2[nfiles2] = invar[i];
172 cpl_msg_warning(fctid,
"No good images in input list");
180 datas = cpl_malloc(nfiles2*
sizeof(
float *));
182 vars = cpl_malloc(nfiles2*
sizeof(
float *));
185 masks = cpl_malloc(nfiles2*
sizeof(
unsigned char *));
187 nx = cpl_image_get_size_x(im);
188 ny = cpl_image_get_size_y(im);
193 if (objmaskfits != NULL) {
201 xin = cpl_malloc(npts*
sizeof(
double));
202 yin = cpl_malloc(npts*
sizeof(
double));
203 xout = cpl_malloc(npts*
sizeof(
double));
204 yout = cpl_malloc(npts*
sizeof(
double));
205 dx = cpl_malloc(nfiles2*
sizeof(
double));
206 dy = cpl_malloc(nfiles2*
sizeof(
double));
211 for (j = 0; j < ny; j++) {
212 for (i = 0; i < nx; i++) {
213 xin[ind] = (double)(i+1);
214 yin[ind++] = (double)(j+1);
223 for (i = 0; i < nfiles2; i++) {
230 cpl_wcs_delete(wcsimg);
232 cpl_wcs_delete(wcsmask);
239 for (i = 0; i < nfiles2; i++) {
241 datas[i] = cpl_image_get_data_float(im);
242 masks[i] = cpl_calloc(npts,
sizeof(
unsigned char));
254 for (jy = 0; jy < ny; jy++) {
255 for (jx = 0; jx < nx; jx++) {
257 if (confdata != NULL && confdata[ind] == 0) {
259 }
else if (objmaskfits != NULL) {
260 kind = (int)(yout[ind] + dy[i] - 0.5)*nx_mask +
261 (int)(xout[ind] + dx[i] - 0.5);
263 masks[i][ind] = opm[kind];
272 if (objmaskfits != NULL) {
283 masksky_zeros(datas,masks,nfiles2,npts,&zeros);
287 combine(nfiles2,0,npts,datas,vars,masks,&sky,&skyv,&sky_bpm);
291 skyim = cpl_image_wrap_float(nx,ny,sky);
292 for (i = 0; i < npts; i++) {
294 ix = npts - (iy-1)*nx;
296 cpl_image_reject(skyim,(cpl_size)ix,(cpl_size)iy);
301 if (objmaskfits != NULL) {
302 cpl_propertylist_update_string(plist,
"ESO DRS MASKUSED",
304 cpl_propertylist_set_comment(plist,
"ESO DRS MASKUSED",
305 "Object masked used to make sky");
307 cpl_propertylist_update_string(plist,
"ESO DRS SKYALGO",
"pawsky_minus");
308 cpl_propertylist_set_comment(plist,
"ESO DRS SKYALGO",
309 "Sky estimation algorithm");
312 skyimv = cpl_image_wrap_float(nx,ny,skyv);
324 combine_mult(nfiles2,0,npts,datas,vars,masks,sky,skyv);
328 for (i = 0; i < nfiles2; i++) {
329 casu_qmedsig(datas[i],masks[i],(
long)npts,3.0,1,DATAMIN,DATAMAX,&val,
331 val = zeros[i] - val;
332 for (j = 0; j < npts; j++)
339 for (i = 0; i < nfiles2; i++) {
341 cpl_propertylist_update_string(plist,
"ESO DRS SKYSUB",
342 "Done with pawsky_minus");