00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "add_bp_map.h"
00014 #include "sinfoni_pro_save.h"
00015 #include <sinfoni_memory.h>
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 int add_bp_map (const char* plugin_id,cpl_parameterlist* config, cpl_frameset* sof)
00039 {
00040
00041 int nmsk =0;
00042 int nmsk_ref_fits =0;
00043 int i=0;
00044 int k=0;
00045 int n_bad=0;
00046 OneImage** eimg_sum=NULL;
00047 OneImage* eimg_set=NULL;
00048 OneImage* eimg_tot=NULL;
00049
00050
00051 cpl_image* img_sum=NULL;
00052
00053 cpl_frameset* msk_set=NULL;
00054 cpl_frameset* msk_ref_fits=NULL;
00055
00056 cpl_frame* frame=NULL;
00057
00058 char frame_name[FILE_NAME_SZ];
00059
00060 char out_msk[FILE_NAME_SZ];
00061 const cxchar *_id = "add_bp_map";
00062
00063 cpl_table* qclog_tbl=NULL;
00064 char* key_value=NULL;
00065 char * tag=NULL;
00066 char * tmp_tag=NULL;
00067
00068 strcpy(out_msk, MASTER_BPMAP_OUT_FILENAME);
00069
00070
00071
00072 msk_set=cpl_frameset_new();
00073 sinfoni_contains_frames_kind(sof,msk_set,"BP_MAP");
00074 nmsk = cpl_frameset_get_size(msk_set);
00075 if(nmsk == 0) {
00076 cpl_msg_warning(_id,"No bad pixel masks to add");
00077 cpl_frameset_delete(msk_set);
00078 return 0;
00079 }
00080 frame = cpl_frameset_get_frame(msk_set,0);
00081 strcpy(frame_name,cpl_frame_get_filename(frame));
00082 tag = (char*) cpl_frame_get_tag(frame);
00083
00084
00085 {
00086 msk_ref_fits=cpl_frameset_new();
00087 if (nmsk < 1) {
00088 cpl_msg_error(_id,"No input frames. Nothing to do.");
00089 if(msk_set) cpl_frameset_delete(msk_set);
00090 if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00091 return -1;
00092 } else if (nmsk==1) {
00093
00094 cpl_msg_error(_id,"Only one input frames. Use it as master.");
00095 frame = cpl_frameset_get_frame(msk_set,0);
00096 strcpy(frame_name,cpl_frame_get_filename(frame));
00097 tag = (char*) cpl_frame_get_tag(frame);
00098 } else {
00099
00100 sinfoni_contains_frames_kind(msk_set,msk_ref_fits,PRO_BP_MAP_NO);
00101 nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits);
00102
00103
00104 if (nmsk_ref_fits < 1) {
00105 cpl_msg_warning(_id,"No %s input frames. Uses %s for FITS header",
00106 PRO_BP_MAP_NO,PRO_BP_MAP_DI);
00107
00108 sinfoni_contains_frames_kind(msk_set,msk_ref_fits,PRO_BP_MAP_DI);
00109 nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits);
00110
00111
00112
00113 if (nmsk_ref_fits < 1) {
00114
00115 cpl_msg_warning(_id,"No %s input frames. Uses %s for FITS header",
00116 PRO_BP_MAP_DI,PRO_BP_MAP_NL);
00117
00118 sinfoni_contains_frames_kind(msk_set,msk_ref_fits,PRO_BP_MAP_NL);
00119 nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits);
00120
00121 if (nmsk_ref_fits < 1) {
00122
00123 cpl_msg_warning(_id,"No %s input frames. Uses 1st mask in the list",
00124 PRO_BP_MAP_NL);
00125 frame = cpl_frameset_get_frame(msk_set,0);
00126 cpl_frameset_erase_frame(msk_set,frame);
00127 tag = (char*) cpl_frame_get_tag(frame);
00128
00129 } else {
00130 cpl_msg_info(_id,"Uses as reference frame %s",PRO_BP_MAP_NL);
00131 frame = cpl_frameset_get_frame(msk_ref_fits,0);
00132 strcpy(frame_name,cpl_frame_get_filename(frame));
00133 tag = (char*) PRO_BP_MAP_NL;
00134 }
00135 } else {
00136 cpl_msg_info(_id,"Uses as reference frame %s",PRO_BP_MAP_DI);
00137 frame = cpl_frameset_get_frame(msk_ref_fits,0);
00138 strcpy(frame_name,cpl_frame_get_filename(frame));
00139 tag = (char*) PRO_BP_MAP_DI;
00140 }
00141 } else {
00142 cpl_msg_info(_id,"Uses as reference frame %s",PRO_BP_MAP_NO);
00143 frame = cpl_frameset_get_frame(msk_ref_fits,0);
00144 strcpy(frame_name,cpl_frame_get_filename(frame));
00145 tag = (char*) PRO_BP_MAP_NO;
00146 }
00147 }
00148 nmsk = cpl_frameset_get_size(msk_set);
00149 eimg_sum = (OneImage**) cpl_calloc ((nmsk+1), sizeof(OneImage*)) ;
00150 eimg_sum[0]=load_image(frame_name);
00151
00152
00153 for (i=0;i<nmsk;i++) {
00154 frame = cpl_frameset_get_frame(msk_set,i);
00155 strcpy(frame_name,cpl_frame_get_filename(frame));
00156 tmp_tag=(char*)cpl_frame_get_tag(frame);
00157 if(strcmp(tmp_tag,tag) == 0 ) {
00158 } else {
00159 eimg_set=load_image(frame_name);
00160 eimg_sum[k+1]=combineMasks (eimg_sum[k], eimg_set);
00161 k++;
00162 destroy_image(eimg_set);
00163 destroy_image(eimg_sum[k-1]);
00164 }
00165 }
00166 eimg_tot=copy_image(eimg_sum[k]);
00167 destroy_image(eimg_sum[k]);
00168 cpl_free(eimg_sum);
00169
00170 img_sum=cpl_image_wrap_float(eimg_tot->lx,eimg_tot->ly,eimg_tot->data);
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190 n_bad = countBadPixels(eimg_tot) ;
00191 cpl_msg_info (_id,"number of bad pixels: %d\n", n_bad) ;
00192
00193
00194
00195 qclog_tbl = sinfoni_qclog_init(1);
00196 key_value = cpl_calloc(FILE_NAME_SZ,sizeof(char));
00197 sprintf(key_value,"%d",n_bad);
00198
00199
00200 sinfoni_qclog_add(qclog_tbl,0,"QC MBP_MAP NBADPIX","CPL_TYPE_INT",
00201 key_value,"No of bad pixels");
00202
00203
00204 if (nmsk>1) {
00205 if(-1 == sinfoni_pro_save_ima(img_sum,msk_ref_fits,sof,out_msk,
00206 PRO_MASTER_BP_MAP,qclog_tbl,
00207 plugin_id,config)) {
00208 cpl_msg_error(_id,"cannot save ima %s", out_msk);
00209 cpl_image_unwrap(img_sum);
00210 destroy_image(eimg_tot);
00211 cpl_table_delete(qclog_tbl);
00212 cpl_free(key_value);
00213 if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00214 if(msk_set) cpl_frameset_delete(msk_set);
00215 return -1;
00216
00217 }
00218 } else {
00219 if(-1 == sinfoni_pro_save_ima(img_sum,msk_set,sof,out_msk,
00220 PRO_MASTER_BP_MAP,qclog_tbl,
00221 plugin_id,config)) {
00222 cpl_msg_error(_id,"cannot save ima %s", out_msk);
00223 cpl_image_unwrap(img_sum);
00224 destroy_image(eimg_tot);
00225 cpl_table_delete(qclog_tbl);
00226 cpl_free(key_value);
00227 if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00228 if(msk_set) cpl_frameset_delete(msk_set);
00229 return -1;
00230
00231 }
00232 }
00233
00234
00235 cpl_image_unwrap(img_sum);
00236 destroy_image(eimg_tot);
00237 cpl_table_delete(qclog_tbl);
00238 cpl_free(key_value);
00239 if(msk_ref_fits) cpl_frameset_delete(msk_ref_fits);
00240 if(msk_set) cpl_frameset_delete(msk_set);
00241
00242 }
00243 sinfoni_memory_status();
00244 return 0;
00245 }
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255