66 sz=cpl_imagelist_get_size(iml);
67 tmp=cpl_imagelist_get(iml,0);
68 sx=cpl_image_get_size_x(tmp);
69 sy=cpl_image_get_size_y(tmp);
81 res=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
83 pres=cpl_image_get_data_double(res);
85 flux= (
double*) cpl_calloc(sz ,
sizeof(
double));
87 bpmr=cpl_image_get_bpm(res);
88 pbpmr=cpl_mask_get_data(bpmr);
89 for(
int j=0;j<sy;j++) {
92 for(
int i=0;i<sx;i++) {
98 for (
int k = 0; k < sz; k++) {
99 tmp=cpl_imagelist_get(iml,k);
100 pima=cpl_image_get_data_double(tmp);
101 bpm=cpl_image_get_bpm(tmp);
102 pbpm=cpl_mask_get_data(bpm);
103 if( pbpm[pix] == CPL_BINARY_0 ) {
104 flux[good]=pima[pix];
107 flux[good+bad]=pima[pix];
109 bp_code=CPL_BINARY_1;
115 flux_vec = cpl_vector_wrap( bad, flux);
118 flux_vec = cpl_vector_wrap( good, flux);
121 pres[pix] = cpl_vector_get_mean( flux_vec);
122 pbpmr[pix] = bp_code;
140 iml=cpl_imagelist_new();
143 for(
int i=0;i < sz;i++) {
144 ima=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
145 cpl_imagelist_set(iml,ima,i);
150 for(
int i=0;i <
niter;i++) {
151 iml1=cpl_imagelist_duplicate(iml);
152 iml2=cpl_imagelist_duplicate(iml);
154 cpl_imagelist_delete(iml1);
155 cpl_imagelist_delete(iml2);
159 cpl_imagelist_delete(iml);
161 return cpl_error_get_code();
165 const int mode,
const int win_hsz)
179 int win_sx=2*win_hsx+1;
180 int win_sy=2*win_hsy+1;
181 int sz=cpl_imagelist_get_size(iml_data);
193 cpl_imagelist* iml_good;
194 cpl_imagelist* iml_all;
196 cpl_binary* pbpm_tmp;
198 cpl_mask* not=cpl_mask_duplicate(bpm);
200 cpl_binary* pnot=cpl_mask_get_data(not);
202 ima_tmp=cpl_imagelist_get(iml_data,0);
203 cpl_imagelist* iml_copy=cpl_imagelist_duplicate(iml_data);
205 int sx=cpl_image_get_size_x(ima_tmp);
206 int sy=cpl_image_get_size_y(ima_tmp);
208 res=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
209 cpl_image_add_scalar(res,1.);
210 pres=cpl_image_get_data(res);
211 pbpm=cpl_mask_get_data(bpm);
218 xsh_msg(
"total frames: %d",sz);
220 for(
int j=0;j<sy;j++) {
224 for(
int i=0;i<sx;i++) {
230 if ( pbpm[pix] == CPL_BINARY_0 ) {
234 }
else if ( pbpm[pix] == CPL_BINARY_1 ) {
241 int y_min=j-win_hsy, y_max=j+win_hsy;
248 }
else if ( y_max > sy) {
254 int x_min=i-win_hsx, x_max=i+win_hsx;
260 }
else if ( x_max > sx) {
274 iml_all = cpl_imagelist_new();
275 iml_good = cpl_imagelist_new();
279 for(
int k=0;k<sz;k++) {
280 ima_tmp=cpl_imagelist_get(iml_copy,k);
282 cpl_imagelist_set(iml_good,cpl_image_duplicate(ima_tmp),k);
283 cpl_imagelist_set(iml_all,cpl_image_duplicate(ima_tmp),k);
292 for(
int k=0;k<sz-frame_bad;k++) {
294 ima_tmp=cpl_imagelist_get(iml_good,k);
295 pdata=cpl_image_get_data_double(ima_tmp);
296 bpm_tmp=cpl_image_get_bpm(ima_tmp);
297 pbpm_tmp=cpl_mask_get_data(bpm_tmp);
299 if(pbpm_tmp[pix] == CPL_BINARY_1) {
301 ima_tmp=cpl_imagelist_unset(iml_good,k);
302 bpm_tmp=cpl_image_unset_bpm(ima_tmp);
303 cpl_mask_delete(bpm_tmp);
304 cpl_image_delete(ima_tmp);
314 for(
int k=0;k<sz-frame_bad;k++) {
315 ima_tmp=cpl_imagelist_get(iml_good,k);
316 bpm_tmp=cpl_image_set_bpm(ima_tmp,cpl_mask_duplicate(bpm));
317 cpl_mask_delete(bpm_tmp);
321 for(
int k=0;k<sz;k++) {
322 ima_tmp=cpl_imagelist_get(iml_all,k);
323 bpm_tmp=cpl_image_set_bpm(ima_tmp,cpl_mask_duplicate(bpm));
324 cpl_mask_delete(bpm_tmp);
334 for(
y=y_min;
y <= y_max;
y++) {
336 for(
x=x_min;
x <= x_max;
x++) {
341 for(
int k=0;k<sz;k++) {
342 ima_tmp=cpl_imagelist_get(iml_all,k);
343 pdata=cpl_image_get_data_double(ima_tmp);
344 bpm_tmp=cpl_image_get_bpm(ima_tmp);
345 pbpm_tmp=cpl_mask_get_data(bpm_tmp);
346 if(pbpm_tmp[point] == CPL_BINARY_0) {
347 sum_all += pdata[point];
354 for(
int k=0;k<sz-frame_bad;k++) {
355 ima_tmp=cpl_imagelist_get(iml_good,k);
356 pdata=cpl_image_get_data_double(ima_tmp);
357 bpm_tmp=cpl_image_get_bpm(ima_tmp);
358 pbpm_tmp=cpl_mask_get_data(bpm_tmp);
360 if( pbpm[point] == CPL_BINARY_0 ) {
361 sum_good += pdata[point];
366 for(
int k=0;k<sz-frame_bad;k++) {
367 ima_tmp=cpl_imagelist_get(iml_good,k);
368 pdata=cpl_image_get_data_double(ima_tmp);
370 if( pnot[pix] == CPL_BINARY_0 && pix != point) {
371 sum_good_pix += pdata[pix];
375 if( pnot[pix] == CPL_BINARY_0 && pix == point) {
376 sum_tot_pix += pdata[pix];
384 scale = sum_all / sum_good;
387 pres[pix]=scale*num_tot_pix/sz;
389 xsh_msg(
"sum all %g good %g good_pix %g num_good %d sum_tot_pix %g num_tot_pix %d scale %g res: %g",
390 sum_all,sum_good,sum_good_pix, num_good_pix, sum_tot_pix, num_tot_pix, scale, pres[pix]);
394 int n=cpl_imagelist_get_size(iml_good);
396 for(
int k=0;k<
n;k++) {
397 ima_tmp=cpl_imagelist_get(iml_good,k);
398 cpl_image_delete(ima_tmp);
400 for(
int k=0;k<sz;k++) {
401 ima_tmp=cpl_imagelist_get(iml_all,k);
402 cpl_image_delete(ima_tmp);
410 cpl_imagelist_unwrap(iml_good);
411 cpl_imagelist_unwrap(iml_all);
415 cpl_imagelist_delete(iml_copy);
416 cpl_mask_delete(not);
424 const int mode,
const int win_hsz)
438 int win_sx=2*win_hsx+1;
439 int win_sy=2*win_hsy+1;
440 int sz=cpl_imagelist_get_size(iml_data);
452 cpl_imagelist* iml_good;
453 cpl_imagelist* iml_all;
455 cpl_binary* pbpm_tmp;
457 cpl_mask* not=cpl_mask_duplicate(bpm);
459 cpl_binary* pnot=cpl_mask_get_data(not);
461 ima_tmp=cpl_imagelist_get(iml_data,0);
462 cpl_imagelist* iml_copy=cpl_imagelist_duplicate(iml_data);
464 int sx=cpl_image_get_size_x(ima_tmp);
465 int sy=cpl_image_get_size_y(ima_tmp);
467 res=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
468 cpl_image_add_scalar(res,1.);
469 pres=cpl_image_get_data(res);
471 int* px=cpl_table_get_data_int(tab_bpm,
"x");
472 int* py=cpl_table_get_data_int(tab_bpm,
"y");
473 int size=cpl_table_get_nrow(tab_bpm);
474 pbpm=cpl_mask_get_data(bpm);
481 xsh_msg(
"total frames: %d",sz);
501 int y_min=j-win_hsy, y_max=j+win_hsy;
508 }
else if ( y_max > sy) {
514 int x_min=i-win_hsx, x_max=i+win_hsx;
520 }
else if ( x_max > sx) {
534 iml_all = cpl_imagelist_new();
535 iml_good = cpl_imagelist_new();
539 for(
int k=0;k<sz;k++) {
540 ima_tmp=cpl_imagelist_get(iml_copy,k);
542 cpl_imagelist_set(iml_good,cpl_image_duplicate(ima_tmp),k);
543 cpl_imagelist_set(iml_all,cpl_image_duplicate(ima_tmp),k);
552 for(
int k=0;k<sz-frame_bad;k++) {
554 ima_tmp=cpl_imagelist_get(iml_good,k);
555 pdata=cpl_image_get_data_double(ima_tmp);
556 bpm_tmp=cpl_image_get_bpm(ima_tmp);
557 pbpm_tmp=cpl_mask_get_data(bpm_tmp);
559 if(pbpm_tmp[pix] == CPL_BINARY_1) {
561 ima_tmp=cpl_imagelist_unset(iml_good,k);
562 bpm_tmp=cpl_image_unset_bpm(ima_tmp);
563 cpl_mask_delete(bpm_tmp);
564 cpl_image_delete(ima_tmp);
574 for(
int k=0;k<sz-frame_bad;k++) {
575 ima_tmp=cpl_imagelist_get(iml_good,k);
576 bpm_tmp=cpl_image_set_bpm(ima_tmp,cpl_mask_duplicate(bpm));
577 cpl_mask_delete(bpm_tmp);
581 for(
int k=0;k<sz;k++) {
582 ima_tmp=cpl_imagelist_get(iml_all,k);
583 bpm_tmp=cpl_image_set_bpm(ima_tmp,cpl_mask_duplicate(bpm));
584 cpl_mask_delete(bpm_tmp);
594 for(
y=y_min;
y <= y_max;
y++) {
596 for(
x=x_min;
x <= x_max;
x++) {
601 for(
int k=0;k<sz;k++) {
602 ima_tmp=cpl_imagelist_get(iml_all,k);
603 pdata=cpl_image_get_data_double(ima_tmp);
604 bpm_tmp=cpl_image_get_bpm(ima_tmp);
605 pbpm_tmp=cpl_mask_get_data(bpm_tmp);
606 if(pbpm_tmp[point] == CPL_BINARY_0) {
607 sum_all += pdata[point];
614 for(
int k=0;k<sz-frame_bad;k++) {
615 ima_tmp=cpl_imagelist_get(iml_good,k);
616 pdata=cpl_image_get_data_double(ima_tmp);
617 bpm_tmp=cpl_image_get_bpm(ima_tmp);
618 pbpm_tmp=cpl_mask_get_data(bpm_tmp);
620 if( pbpm[point] == CPL_BINARY_0 ) {
621 sum_good += pdata[point];
626 for(
int k=0;k<sz-frame_bad;k++) {
627 ima_tmp=cpl_imagelist_get(iml_good,k);
628 pdata=cpl_image_get_data_double(ima_tmp);
630 if( pnot[pix] == CPL_BINARY_0 && pix != point) {
631 sum_good_pix += pdata[pix];
635 if( pnot[pix] == CPL_BINARY_0 && pix == point) {
636 sum_tot_pix += pdata[pix];
644 scale = sum_all / sum_good;
648 pres[pix]=scale*num_tot_pix/sz;
650 xsh_msg(
"sum all %g good %g good_pix %g num_good %d sum_tot_pix %g num_tot_pix %d scale %g res: %g",
651 sum_all,sum_good,sum_good_pix, num_good_pix, sum_tot_pix, num_tot_pix, scale, pres[pix]);
655 int n=cpl_imagelist_get_size(iml_good);
657 for(
int k=0;k<
n;k++) {
658 ima_tmp=cpl_imagelist_get(iml_good,k);
659 cpl_image_delete(ima_tmp);
661 for(
int k=0;k<sz;k++) {
662 ima_tmp=cpl_imagelist_get(iml_all,k);
663 cpl_image_delete(ima_tmp);
671 cpl_imagelist_unwrap(iml_good);
672 cpl_imagelist_unwrap(iml_all);
676 cpl_imagelist_delete(iml_copy);
677 cpl_mask_delete(not);
685 cpl_imagelist* scale_frames,cpl_image** ima_corr)
688 cpl_image* scale_ima;
692 int sz=cpl_imagelist_get_size(iml_data);
693 double norm_good_pix;
700 ima_tmp=cpl_imagelist_get(iml_data,0);
701 int sx=cpl_image_get_size_x(ima_tmp);
702 int sy=cpl_image_get_size_y(ima_tmp);
705 int* px=cpl_table_get_data_int(tab_bpm,
"x");
706 int* py=cpl_table_get_data_int(tab_bpm,
"y");
707 int size=cpl_table_get_nrow(tab_bpm);
713 double* pcor=cpl_image_get_data_double(*ima_corr);
729 for(
int k=0;k<sz;k++) {
730 ima_tmp=cpl_imagelist_get(iml_data,k);
731 bpm_tmp=cpl_image_get_bpm(ima_tmp);
732 pbpm=cpl_mask_get_data(bpm_tmp);
733 sprintf(name,
"bad_%d.fits",k);
734 cpl_mask_save(bpm_tmp,name,NULL,CPL_IO_DEFAULT);
736 if( pbpm[pix] == CPL_BINARY_0 ) {
737 pdata=cpl_image_get_data_double(ima_tmp);
739 scale_ima=cpl_imagelist_get(scale_frames,k);
740 pscale=cpl_image_get_data_double(scale_ima);
742 norm_good_pix += pdata[pix]/pscale[j];
750 norm_good_pix /= num_good_pix;
751 xsh_msg(
"m=%d norm=%g num=%d",
m,norm_good_pix,num_good_pix);
752 pcor[pix] = norm_good_pix;
756 return cpl_error_get_code();
763 const int mode,
const int sx)
779 pbpm[pix-2*sx]=bp_code;
780 pbpm[pix-1*sx]=bp_code;
782 pbpm[pix+1*sx]=bp_code;
783 pbpm[pix+2*sx]=bp_code;
786 return cpl_error_get_code();
794 const double A,
const double sigma,
const double bkg,
795 cpl_vector* trace,
const int min,
const int max,
803 cpl_image* gauss = cpl_image_new(sx, sy, CPL_TYPE_DOUBLE);
804 double* pgauss = NULL;
805 pgauss = cpl_image_get_data_double(gauss);
810 double* pvec = cpl_vector_get_data(trace);
813 for (j = min; j <=
max; j++) {
815 for (i = 0; i < sx; i++) {
816 arg = (
y - pvec[i]) /
sigma;
819 pgauss[j * sx + i] += A * exp(-0.5 * arg) + bkg;
824 for (j = 0; j < sy; j++) {
825 for (i = min; i <=
max; i++) {
828 arg = (
x - pvec[j]) /
sigma;
831 pgauss[j * sx + i] += A * exp(-0.5 * arg) + bkg;
841 int* min,
int*
max) {
849 return cpl_error_get_code();
854 cpl_vector* trace=cpl_vector_new(sx);
856 for(
int i=0;i<sx;i++) {
857 cpl_vector_set(trace,i,sy/2);
860 for(
int j=0;j<sy;j++) {
861 cpl_vector_set(trace,j,sx/2);
869 cpl_image** ima, cpl_mask** bpm_tot) {
872 cpl_binary* pbpm=CPL_BINARY_0;
878 bpm=cpl_mask_new(sx,sy);
879 pbpm=cpl_mask_get_data(bpm);
881 cpl_image_set_bpm(*ima,cpl_mask_duplicate(bpm));
882 *bpm_tot=cpl_mask_duplicate(bpm);
883 cpl_mask_delete(bpm);
889 bpm=cpl_mask_new(sx,sy);
890 pbpm=cpl_mask_get_data(bpm);
897 cpl_image_set_bpm(*ima,cpl_mask_duplicate(bpm));
898 cpl_mask_or(*bpm_tot,bpm);
899 cpl_mask_delete(bpm);
904 bpm=cpl_mask_new(sx,sy);
905 pbpm=cpl_mask_get_data(bpm);
908 cpl_image_set_bpm(*ima,cpl_mask_duplicate(bpm));
909 cpl_mask_or(*bpm_tot,bpm);
910 cpl_mask_delete(bpm);
915 bpm=cpl_mask_new(sx,sy);
916 pbpm=cpl_mask_get_data(bpm);
917 pix=3*sy*sx/4+3*sx/4;
921 cpl_image_set_bpm(*ima,cpl_mask_duplicate(bpm));
922 cpl_mask_or(*bpm_tot,bpm);
923 cpl_mask_delete(bpm);
927 bpm=cpl_mask_new(sx,sy);
928 pbpm=cpl_mask_get_data(bpm);
931 cpl_image_set_bpm(*ima,cpl_mask_duplicate(bpm));
932 cpl_mask_or(*bpm_tot,bpm);
933 cpl_mask_delete(bpm);
936 return cpl_error_get_code();
943 const int size=cpl_mask_count(bpm);
944 cpl_table* xy_pos=cpl_table_new(
size);
945 cpl_table_new_column(xy_pos,
"x",CPL_TYPE_INT);
946 cpl_table_new_column(xy_pos,
"y",CPL_TYPE_INT);
947 int* px=cpl_table_get_data_int(xy_pos,
"x");
948 int* py=cpl_table_get_data_int(xy_pos,
"y");
949 int sx=cpl_mask_get_size_x(bpm);
950 int sy=cpl_mask_get_size_y(bpm);
951 cpl_binary* pbpm=cpl_mask_get_data(bpm);
956 for(
int j=0;j<sy;j++){
958 for(
int i=0;i<sx;i++){
960 if ( pbpm[pix] == CPL_BINARY_1 ) {
975 cpl_imagelist* scale_factors;
976 cpl_imagelist* iml_copy=cpl_imagelist_duplicate(iml_in);
978 const cpl_image* ima;
992 int size = cpl_imagelist_get_size(iml_copy);
993 scale_factors=cpl_imagelist_new();
994 bpm_copy=cpl_image_unset_bpm(ima_in);
996 for(
int k = 0; k <
size; k++) {
997 ima=cpl_imagelist_get_const(iml_copy,k);
998 sx=cpl_image_get_size_x(ima);
999 sy=cpl_image_get_size_y(ima);
1000 sprintf(fname,
"orig_%d.fits",k);
1001 cpl_image_save(ima,fname,CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1002 cpl_image_divide(ima,ima_in);
1003 sprintf(fname,
"scaled_%d.fits",k);
1004 cpl_image_save(ima,fname,CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1005 pima=cpl_image_get_data_double(ima);
1007 bpm=cpl_image_get_bpm(ima);
1008 pbpm=cpl_mask_get_data(bpm);
1009 for(
int j=0; j < sy; j++) {
1010 for(
int i=0; i < sx; i++) {
1012 if( (pbpm[pix] == CPL_BINARY_1) ||
1013 isnan(pima[pix]) || isinf(pima[pix]) )
1015 pbpm[pix] = CPL_BINARY_1;
1020 scale=cpl_image_new(1,sy,CPL_TYPE_DOUBLE);
1021 pscale=cpl_image_get_data_double(scale);
1022 for(
int j=0;j<sy;j++){
1023 nbad=cpl_mask_count_window(bpm,j+1,1,j+1,sx);
1025 avg=cpl_image_get_mean_window(ima,1,j+1,sx,j+1);
1026 med=cpl_image_get_median_window(ima,1,j+1,sx,j+1);
1027 rms=cpl_image_get_stdev_window(ima,1,j+1,sx,j+1);
1037 cpl_imagelist_set(scale_factors,scale,k);
1040 cpl_image_set_bpm(ima_in,bpm_copy);
1041 cpl_imagelist_delete(iml_copy);
1042 return scale_factors;
1045static cpl_error_code
1049 cpl_image* ima=NULL;
1050 cpl_image* res=NULL;
1052 cpl_imagelist* flag=NULL;
1053 cpl_imagelist* all=NULL;
1058 const int nframes=5;
1060 cpl_mask* bpm_tot=NULL;
1067 flag=cpl_imagelist_new();
1068 all=cpl_imagelist_new();
1079 for(
int i=0;i<nframes;i++) {
1085 cpl_image_add_scalar(ima,value+i*
step);
1086 cpl_imagelist_set(all,cpl_image_duplicate(ima),i);
1096 bpm=cpl_image_get_bpm(ima);
1097 sprintf(name,
"bpm_%d.fits",i);
1098 cpl_mask_save(bpm,name,NULL,CPL_IO_DEFAULT);
1100 cpl_imagelist_set(flag,cpl_image_duplicate(ima),i);
1101 cpl_image_delete(ima);
1105 cpl_table_save(tab_bp,NULL,NULL,
"tab_bp.fits",CPL_IO_DEFAULT);
1106 cpl_vector_delete(trace);
1107 cpl_imagelist_save(flag,
"flag.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1111 for(
int i=0;i < nframes;i++) {
1112 ima=cpl_imagelist_get(flag,i);
1113 bpm=cpl_image_get_bpm(ima);
1117 sprintf(name,
"bpm_tot.fits");
1118 cpl_mask_save(bpm_tot,name,NULL,CPL_IO_DEFAULT);
1122 for(
int i=0;i < nframes;i++) {
1123 ima=cpl_imagelist_get(flag,i);
1124 bpm=cpl_image_get_bpm(ima);
1130 cpl_image_save(scale,
"scale.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1131 bpm=cpl_image_get_bpm(flagged);
1132 cpl_mask_save(bpm,
"bpm.fits",NULL, CPL_IO_DEFAULT);
1134 norm = cpl_imagelist_collapse_create(all);
1135 res=cpl_image_duplicate(flagged);
1136 if( scale != NULL ) {
1137 cpl_image_multiply(res,scale);
1139 cpl_image_save(res,
"res.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1140 corr=cpl_image_duplicate(flagged);
1141 cpl_image_multiply(corr,res);
1142 cpl_image_save(flagged,
"flagged.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1143 cpl_image_save(norm,
"norm.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1145 cpl_mask_delete(bpm_tot);
1146 cpl_image_delete(res);
1147 cpl_image_delete(flagged);
1148 cpl_image_delete(scale);
1149 cpl_image_delete(norm);
1150 cpl_image_delete(corr);
1151 cpl_imagelist_delete(flag);
1152 cpl_imagelist_delete(all);
1153 cpl_table_delete(tab_bp);
1154 return cpl_error_get_code();
1158static cpl_error_code
1161 cpl_image* ima=NULL;
1162 cpl_imagelist* flag=NULL;
1163 cpl_imagelist* all=NULL;
1168 const int nframes=5;
1170 cpl_mask* bpm_tot=NULL;
1177 flag=cpl_imagelist_new();
1178 all=cpl_imagelist_new();
1192 for(
int i=0;i<nframes;i++) {
1198 cpl_image_add_scalar(ima,value+i*
step);
1199 cpl_imagelist_set(all,cpl_image_duplicate(ima),i);
1209 bpm=cpl_image_get_bpm(ima);
1210 sprintf(name,
"bpm_%d.fits",i);
1211 cpl_mask_save(bpm,name,NULL,CPL_IO_DEFAULT);
1213 cpl_imagelist_set(flag,cpl_image_duplicate(ima),i);
1214 cpl_image_delete(ima);
1218 cpl_imagelist_save(flag,
"flag.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1220 sprintf(name,
"bpm_tot.fits");
1221 cpl_mask_save(bpm_tot,name,NULL,CPL_IO_DEFAULT);
1225 cpl_table_save(tab_bp,NULL,NULL,
"tab_bp.fits",CPL_IO_DEFAULT);
1226 cpl_vector_delete(trace);
1230 cpl_image_save(flagged,
"flagged1.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1233 for(
int i=0;i<nframes;i++) {
1235 ima=cpl_imagelist_get(flag,i);
1236 bpm=cpl_image_get_bpm(ima);
1237 sprintf(name,
"chk_%d.fits",i);
1238 cpl_mask_save(bpm,name,NULL,CPL_IO_DEFAULT);
1244 cpl_imagelist_save(sf,
"sf.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1247 cpl_image_save(flagged,
"flagged2.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1250 bpm=cpl_image_get_bpm(flagged);
1251 cpl_mask_save(bpm,
"bpm.fits",NULL, CPL_IO_DEFAULT);
1253 norm = cpl_imagelist_collapse_create(all);
1254 cpl_image_save(flagged,
"result.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1256 cpl_image_save(flagged,
"flagged.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1257 cpl_image_save(norm,
"norm.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1260 cpl_mask_delete(bpm_tot);
1261 cpl_image_delete(flagged);
1262 cpl_image_delete(norm);
1263 cpl_imagelist_delete(flag);
1264 cpl_imagelist_delete(all);
1265 cpl_table_delete(tab_bp);
1266 return cpl_error_get_code();
1271static cpl_error_code
1274 cpl_image* ima=NULL;
1275 cpl_imagelist* flag=NULL;
1276 cpl_imagelist* all=NULL;
1281 const int nframes=15;
1283 cpl_mask* bpm_tot=NULL;
1290 flag=cpl_imagelist_new();
1291 all=cpl_imagelist_new();
1306 for(
int i=0;i<nframes;i++) {
1310 xsh_msg(
"frame value %g factor=%g",value+i*
step,factor);
1312 cpl_image_multiply_scalar(ima,factor);
1313 cpl_image_add_scalar(ima,value+i*
step);
1314 cpl_imagelist_set(all,cpl_image_duplicate(ima),i);
1324 bpm=cpl_image_get_bpm(ima);
1325 sprintf(name,
"bpm_%d.fits",i);
1326 cpl_mask_save(bpm,name,NULL,CPL_IO_DEFAULT);
1328 cpl_imagelist_set(flag,cpl_image_duplicate(ima),i);
1329 cpl_image_delete(ima);
1333 cpl_imagelist_save(flag,
"flag.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1335 sprintf(name,
"bpm_tot.fits");
1336 cpl_mask_save(bpm_tot,name,NULL,CPL_IO_DEFAULT);
1340 cpl_table_save(tab_bp,NULL,NULL,
"tab_bp.fits",CPL_IO_DEFAULT);
1341 cpl_vector_delete(trace);
1345 cpl_image_save(flagged,
"flagged1.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1348 for(
int i=0;i<nframes;i++) {
1350 ima=cpl_imagelist_get(flag,i);
1351 bpm=cpl_image_get_bpm(ima);
1352 sprintf(name,
"chk_%d.fits",i);
1353 cpl_mask_save(bpm,name,NULL,CPL_IO_DEFAULT);
1359 cpl_imagelist_save(sf,
"sf.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1362 cpl_image_save(flagged,
"flagged2.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1365 bpm=cpl_image_get_bpm(flagged);
1366 cpl_mask_save(bpm,
"bpm.fits",NULL, CPL_IO_DEFAULT);
1368 norm = cpl_imagelist_collapse_create(all);
1369 cpl_image_save(flagged,
"result.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1371 cpl_image_save(flagged,
"flagged.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1372 cpl_image_save(norm,
"norm.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1375 cpl_mask_delete(bpm_tot);
1376 cpl_image_delete(flagged);
1377 cpl_image_delete(norm);
1378 cpl_imagelist_delete(flag);
1379 cpl_imagelist_delete(all);
1380 cpl_table_delete(tab_bp);
1381 return cpl_error_get_code();
1385 static cpl_error_code
1388 cpl_image* ima=NULL;
1389 cpl_imagelist* flag=NULL;
1390 cpl_imagelist* all=NULL;
1395 const int nframes=5;
1397 cpl_mask* bpm_tot=NULL;
1405 flag=cpl_imagelist_new();
1406 all=cpl_imagelist_new();
1407 for(
int i=0;i<nframes;i++) {
1408 ima=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
1410 cpl_image_add_scalar(ima,value+i*
step);
1411 cpl_imagelist_set(all,cpl_image_duplicate(ima),i);
1421 bpm=cpl_image_get_bpm(ima);
1422 sprintf(name,
"bpm_%d.fits",i);
1423 cpl_mask_save(bpm,name,NULL,CPL_IO_DEFAULT);
1424 cpl_imagelist_set(flag,cpl_image_duplicate(ima),i);
1425 cpl_image_delete(ima);
1427 cpl_imagelist_save(flag,
"flag.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1429 sprintf(name,
"bpm_tot.fits");
1430 cpl_mask_save(bpm_tot,name,NULL,CPL_IO_DEFAULT);
1433 cpl_table_save(tab_bp,NULL,NULL,
"tab_bp.fits",CPL_IO_DEFAULT);
1442 cpl_image_save(flagged,
"result.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1444 bpm=cpl_image_get_bpm(flagged);
1445 cpl_mask_save(bpm,
"bpm_flagged.fits",NULL, CPL_IO_DEFAULT);
1447 norm = cpl_imagelist_collapse_create(all);
1448 cpl_image_save(norm,
"norm.fits",CPL_TYPE_FLOAT,NULL,CPL_IO_DEFAULT);
1450 cpl_mask_delete(bpm_tot);
1451 cpl_image_delete(flagged);
1452 cpl_image_delete(norm);
1453 cpl_imagelist_delete(flag);
1454 cpl_imagelist_delete(all);
1455 cpl_imagelist_delete(sf);
1456 cpl_table_delete(tab_bp);
1458 return cpl_error_get_code();
1465 cpl_frame* frame=cpl_frame_new();
1466 cpl_frame_set_filename(frame, fname);
1478 static cpl_error_code
1480 const double RON,
const double gain,
const char* fname)
1483 cpl_image* ima=NULL;
1484 cpl_image* err=NULL;
1485 cpl_image* qua=NULL;
1489 cpl_mask* bpm_tot=NULL;
1490 cpl_propertylist* plist=NULL;
1492 ima=cpl_image_new(sx,sy,CPL_TYPE_FLOAT);
1493 cpl_image_add_scalar(ima,bkg);
1497 plist=cpl_propertylist_new();
1508 cpl_propertylist_append_string(plist,
"EXTNAME",
"FLUX");
1512 cpl_image_save(ima,fname,CPL_TYPE_FLOAT,plist,CPL_IO_DEFAULT);
1513 err=cpl_image_duplicate(ima);
1514 cpl_image_divide_scalar(err,gain);
1516 double RON2=RON*RON;
1517 cpl_image_add_scalar(err,RON2);
1518 qua=cpl_image_new(sx,sy,CPL_TYPE_INT);
1519 cpl_image_power(err,0.5);
1520 cpl_image_save(err, fname, CPL_TYPE_FLOAT,plist,CPL_IO_EXTEND);
1521 cpl_image_save(qua, fname,CPL_TYPE_INT,plist,CPL_IO_EXTEND);
1523 cpl_mask_delete(bpm_tot);
1524 cpl_image_delete(ima);
1525 cpl_image_delete(err);
1526 cpl_image_delete(qua);
1531 return cpl_error_get_code();
1538 static cpl_error_code
1540 const double RON,
const double gain,
const double A,
1541 const double sigma,
const char* fname)
1544 cpl_image* ima=NULL;
1545 cpl_image* err=NULL;
1546 cpl_image* qua=NULL;
1552 cpl_mask* bpm_tot=NULL;
1555 cpl_propertylist* plist=NULL;
1558 cpl_image_add_scalar(ima,bkg);
1560 plist=cpl_propertylist_new();
1571 cpl_propertylist_append_string(plist,
"EXTNAME",
"FLUX");
1574 cpl_image_save(ima,fname,CPL_TYPE_FLOAT,plist,CPL_IO_DEFAULT);
1575 err=cpl_image_duplicate(ima);
1576 cpl_image_divide_scalar(err,gain);
1577 double RON2=RON*RON;
1578 cpl_image_add_scalar(err,RON2);
1579 qua=cpl_image_new(sx,sy,CPL_TYPE_INT);
1580 cpl_image_power(err,0.5);
1581 cpl_image_save(err, fname, CPL_TYPE_FLOAT,plist,CPL_IO_EXTEND);
1582 cpl_image_save(qua, fname,CPL_TYPE_INT,plist,CPL_IO_EXTEND);
1584 cpl_mask_delete(bpm_tot);
1585 cpl_vector_delete(trace);
1586 cpl_image_delete(ima);
1587 cpl_image_delete(err);
1588 cpl_image_delete(qua);
1593 return cpl_error_get_code();
1597 static cpl_error_code
1603 const double bkg=10;
1605 const double gain=1;
1622 const int decode_bp=0;
1626 int *slit_index = NULL;
1627 float* nod_slit = NULL;
1628 float slit_min=999, slit_max=-999;
1629 float nod_slit_min, nod_slit_max;
1640 rec_input_list[0] = l1;
1641 rec_input_list[1] = l2;
1642 nod_slit_min = nod_slit[0];
1643 nod_slit_max = nod_slit[nslit-1];
1644 xsh_msg(
"nslit=%d nod_slit_min=%g nod_slit_max=%g",
1645 nslit,nod_slit_min, nod_slit_max);
1648 for (
int i = 0 ; i < nb_frames ; i++ ) {
1649 float nod_slit_min, nod_slit_max;
1652 float* nod_slit = NULL;
1654 list = rec_input_list[i];
1657 nod_slit_min = nod_slit[0];
1658 nod_slit_max = nod_slit[nslit-1];
1660 if ( nod_slit_min < slit_min){
1661 slit_min = nod_slit_min;
1663 if (nod_slit_max > slit_max){
1664 slit_max = nod_slit_max;
1670 xsh_msg(
"slit_min=%g slit_max=%g slit_step=%g",slit_min, slit_max,
slit_step);
1675 xsh_msg(
"ok3 nb_frames=%d",nb_frames);
1692 xsh_msg(
"ok4 nb_frames=%d",nb_frames);
1698 if ( rec_input_list != NULL){
1699 for (
int i = 0 ; i < nb_frames ; i++ ) {
1705 return cpl_error_get_code();
1707 static cpl_error_code
1715 return cpl_error_get_code();
1727 cpl_test_init(PACKAGE_BUGREPORT,CPL_MSG_INFO);
1729 const int win_hsz=2;
1737 cpl_test_error(CPL_ERROR_NONE);
1738 return cpl_test_end(0);
int main()
Unit test of xsh_bspline_interpol.
void xsh_rec_list_add(xsh_rec_list *dest, xsh_rec_list **from, int *slit_index, int nb_frames, int no, int method, const int decode_bp)
void xsh_compute_slit_index(float slit_min, float slit_step, xsh_rec_list **from, int *slit_index_tab, int size)
int xsh_rec_list_get_nslit(xsh_rec_list *list, int idx)
cpl_frame * xsh_rec_list_save2(xsh_rec_list *list, const char *filename, const char *tag)
save an rec list to a frame
cpl_propertylist * xsh_rec_list_get_header(xsh_rec_list *list)
get header of the table
xsh_rec_list * xsh_rec_list_load_eso(cpl_frame *frame, xsh_instrument *instrument)
float * xsh_rec_list_get_slit(xsh_rec_list *list, int idx)
void xsh_rec_list_free(xsh_rec_list **list)
free memory associated to a rec_list
void xsh_instrument_free(xsh_instrument **instrument)
free an instrument structure
xsh_instrument * xsh_instrument_new(void)
create new instrument structure
#define xsh_msg(...)
Print a message on info level.
cpl_error_code xsh_pfits_set_wcs2(cpl_propertylist *header, const double crpix2, const double crval2, const double cdelt2)
double xsh_pfits_get_rectify_bin_space(cpl_propertylist *plist)
find out the rectify space (slit) binning
cpl_error_code xsh_pfits_set_wcs1(cpl_propertylist *header, const double crpix1, const double crval1, const double cdelt1)
void xsh_unwrap_vector(cpl_vector **v)
Unwrap a vector and set the pointer to NULL.
void xsh_free_frame(cpl_frame **f)
Deallocate a frame and set the pointer to NULL.
void xsh_free_propertylist(cpl_propertylist **p)
Deallocate a property list and set the pointer to NULL.
int xsh_print_rec_status(const int val)
Check if an error has happened and returns error kind and location.
#define XSH_RECTIFY_BIN_SPACE
#define XSH_FREE(POINTER)
#define XSH_CALLOC(POINTER, TYPE, SIZE)