SINFONI Pipeline Reference Manual  2.6.0
sinfo_new_add_bp_map.c
1 /*
2  * This file is part of the ESO SINFONI Pipeline
3  * Copyright (C) 2004,2005 European Southern Observatory
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
18  */
19 /*----------------------------------------------------------------------------
20 
21  File name : sinfo_new_add_bp_map.c
22  Author : A. Modigliani
23  Created on : Oct 13, 2004
24  Description : Coadd different BP MAP
25 
26  ---------------------------------------------------------------------------*/
27 
28 #ifdef HAVE_CONFIG_H
29 # include <config.h>
30 #endif
31 /*----------------------------------------------------------------------------
32  Includes
33  ---------------------------------------------------------------------------*/
34 #include "sinfo_new_add_bp_map.h"
35 #include "sinfo_pro_save.h"
36 #include "sinfo_error.h"
37 #include "sinfo_utils_wrappers.h"
38 /* #include "image_ops.h" */
39 #include "sinfo_pro_types.h"
40 #include "sinfo_functions.h"
41 #include "sinfo_detlin.h"
42 /*----------------------------------------------------------------------------
43  Prototypes
44  ---------------------------------------------------------------------------*/
45 
46 /*----------------------------------------------------------------------------
47  Defines
48  ---------------------------------------------------------------------------*/
49 
50 
51 /*----------------------------------------------------------------------------
52  Function Definitions
53  ---------------------------------------------------------------------------*/
71 int
72 sinfo_new_add_bp_map (const char* plugin_id,
73  cpl_parameterlist* config,
74  cpl_frameset* sof,cpl_frameset* ref_set)
75 {
76 
77  int nmsk =0;
78  int nmsk_ref_fits =0;
79  int i=0;
80  int k=0;
81  int n_bad=0;
82  cpl_image** img_sum=NULL;
83  cpl_image* img_set=NULL;
84  cpl_image* img_tot=NULL;
85  cpl_frameset* msk_set=NULL;
86  cpl_frameset* msk_ref_fits=NULL;
87  cpl_frame* frame=NULL;
88  double max=0;
89  char frame_name[FILE_NAME_SZ];
90  char out_msk[FILE_NAME_SZ];
91 
92  cpl_table* qclog_tbl=NULL;
93  char * tag=NULL;
94  char * tmp_tag=NULL;
95 
96  strcpy(out_msk, MASTER_BPMAP_OUT_FILENAME);
97 
98 
99  /* cpl_parameterlist_dump(config); */
100  check_nomsg(msk_set=cpl_frameset_new());
101  ck0_nomsg(sinfo_contains_frames_kind(sof,msk_set,"BP_MAP"));
102  check_nomsg(nmsk = cpl_frameset_get_size(msk_set));
103  if(nmsk == 0) {
104  sinfo_msg_warning("No bad pixel masks to add");
105  goto cleanup;
106  }
107 
108 
109  check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
110  strcpy(frame_name,cpl_frame_get_filename(frame));
111  check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
112  {
113  check_nomsg(msk_ref_fits=cpl_frameset_new());
114  if (nmsk < 1) {
115  sinfo_msg_error("No input frames. Nothing to do.");
116  goto cleanup;
117  } else if (nmsk==1) {
118 
119  sinfo_msg_warning("Only one input frames. Use it as master.");
120  check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
121  strcpy(frame_name,cpl_frame_get_filename(frame));
122  check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
123 
124  } else {
125 
126  ck0_nomsg(sinfo_contains_frames_kind(msk_set,
127  msk_ref_fits,PRO_BP_MAP_NO));
128  check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
129 
130  if (nmsk_ref_fits < 1) {
131  sinfo_msg_warning("No %s input frames. Uses %s for FITS header",
132  PRO_BP_MAP_NO,PRO_BP_MAP_DI);
133 
134  ck0_nomsg(sinfo_contains_frames_kind(msk_set,
135  msk_ref_fits,PRO_BP_MAP_DI));
136  check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
137 
138 
139  if (nmsk_ref_fits < 1) {
140 
141  sinfo_msg_warning("No %s input frames. Uses %s for FITS header",
142  PRO_BP_MAP_DI,PRO_BP_MAP_NL);
143 
144  ck0_nomsg(sinfo_contains_frames_kind(msk_set,
145  msk_ref_fits,PRO_BP_MAP_NL));
146  check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
147 
148  if (nmsk_ref_fits < 1) {
149 
150  sinfo_msg_warning("No %s input frames. Uses 1st mask in the list",
151  PRO_BP_MAP_NL);
152  sinfo_free_frameset(&msk_ref_fits);
153  check_nomsg(msk_ref_fits=cpl_frameset_duplicate(msk_set));
154  check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
155  check_nomsg(cpl_frameset_erase_frame(msk_set,frame));
156  check_nomsg(tag = (char*) cpl_frame_get_tag(frame));
157 
158  } else {
159  sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_NL);
160  check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
161  strcpy(frame_name,cpl_frame_get_filename(frame));
162  tag = (char*) PRO_BP_MAP_NL;
163  }
164  } else {
165  sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_DI);
166  check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
167  strcpy(frame_name,cpl_frame_get_filename(frame));
168  tag = (char*) PRO_BP_MAP_DI;
169  }
170  } else {
171  sinfo_msg("Uses as reference frame %s",PRO_BP_MAP_NO);
172  check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
173  strcpy(frame_name,cpl_frame_get_filename(frame));
174  tag = (char*) PRO_BP_MAP_NO;
175  }
176  }
177 
178  check_nomsg(nmsk = cpl_frameset_get_size(msk_set));
179  cknull_nomsg(img_sum = (cpl_image**) cpl_calloc ((nmsk+1),
180  sizeof(cpl_image*))) ;
181  cknull_nomsg(img_sum[0]=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
182 
183  /* here mem leak */
184  for (i=0;i<nmsk;i++) {
185  check_nomsg(frame = cpl_frameset_get_frame(msk_set,i));
186  check_nomsg(strcpy(frame_name,cpl_frame_get_filename(frame)));
187  check_nomsg(tmp_tag=(char*)cpl_frame_get_tag(frame));
188 
189  if(strcmp(tmp_tag,tag) == 0 ) {
190  cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
191  check_nomsg(max=cpl_image_get_max(img_set));
192  if((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) && max>1 ) {
193  sinfo_msg("corr1");
194  check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
195  sinfo_free_image(&(img_sum[0]));
196  check_nomsg(img_sum[0]=cpl_image_duplicate(img_set));
197  }
198 
199  } else {
200 
201  cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
202  check_nomsg(max=cpl_image_get_max(img_set));
203  if((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) && max>1 ) {
204  sinfo_msg("corr2 name=%s tag=%s",frame_name,tmp_tag);
205  check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
206  }
207 
208  cknull_nomsg(img_sum[k+1]=sinfo_new_combine_masks (img_sum[k], img_set));
209  k++;
210  sinfo_free_image(&img_set);
211  sinfo_free_image(&(img_sum[k-1]));
212  }
213  }
214  img_tot=cpl_image_duplicate(img_sum[k]);
215  sinfo_free_image(&(img_sum[k]));
216  sinfo_free_array_image(&img_sum);
217  /*
218 
219  frame = cpl_frameset_get_frame(msk_set,0);
220  strcpy(frame_name,cpl_frame_get_filename(frame));
221  img_sum=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);
222 
223  for (i=1;i<nmsk;i++) {
224  frame = cpl_frameset_get_frame(msk_set,i);
225  strcpy(frame_name,cpl_frame_get_filename(frame));
226  img_set=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);
227  cpl_mask_and(img_sum, img_set);
228 
229  }
230 
231  */
232 
233  n_bad = sinfo_new_count_bad_pixels(img_tot) ;
234  sinfo_msg ("number of bad pixels: %d\n", n_bad) ;
235  cknull_nomsg(qclog_tbl = sinfo_qclog_init());
236  ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,"QC MBP_MAP NBADPIX",
237  n_bad,"No of bad pixels","%d"));
238 
239  if (nmsk>1) {
240  ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
241  PRO_MASTER_BP_MAP,qclog_tbl,
242  plugin_id,config),
243  "cannot save ima %s", out_msk);
244 
245  } else {
246  ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
247  PRO_MASTER_BP_MAP,qclog_tbl,
248  plugin_id,config),
249  "cannot save ima %s", out_msk);
250  }
251 
252  sinfo_free_image(&img_tot);
253  sinfo_free_table(&qclog_tbl);
254  sinfo_free_frameset(&msk_ref_fits);
255  sinfo_free_frameset(&msk_set);
256 
257  }
258 
259  cleanup:
260 
261  sinfo_free_image(&img_tot);
262  if(img_sum!=NULL) {
263  for(i=0;i<nmsk;i++) {
264  if(img_sum[i] != NULL) {
265  sinfo_free_image(&(img_sum[i]));
266  img_sum[i]=NULL;
267  }
268  }
269  sinfo_free_array_image(&img_sum);
270  img_sum=NULL;
271  }
272  sinfo_free_image(&img_set);
273  sinfo_free_table(&qclog_tbl);
274  sinfo_free_frameset(&msk_set);
275  sinfo_free_frameset(&msk_ref_fits);
276 
277  if (cpl_error_get_code() != CPL_ERROR_NONE) {
278  return -1;
279  } else {
280  return 0;
281  }
282 
283 
284 }
285 
286 
287 
#define sinfo_msg_error(...)
Print an error message.
Definition: sinfo_msg.h:69
#define sinfo_msg_warning(...)
Print an warning message.
Definition: sinfo_msg.h:93