49 #include <irplib_utils.h>
52 #include <sinfo_bp_noise.h>
53 #include <sinfo_new_dark.h>
54 #include <sinfo_utilities.h>
55 #include <sinfo_general_config.h>
56 #include <sinfo_bp_config.h>
57 #include <sinfo_bp_noise_config.h>
58 #include <sinfo_dark_config.h>
59 #include <sinfo_tpl_utils.h>
60 #include <sinfo_tpl_dfs.h>
61 #include <sinfo_pfits.h>
62 #include <sinfo_functions.h>
63 #include <sinfo_pfits.h>
64 #include <sinfo_msg.h>
65 #include <sinfo_error.h>
66 #include <sinfo_utils_wrappers.h>
71 static int sinfo_rec_mdark_create(cpl_plugin *plugin);
72 static int sinfo_rec_mdark_exec(cpl_plugin *plugin);
73 static int sinfo_rec_mdark_destroy(cpl_plugin *plugin);
74 static int sinfo_rec_mdark(cpl_parameterlist *config, cpl_frameset *
set);
75 static int count_diff_ndit(cpl_frameset *
set, cpl_vector** dit_val);
81 static char sinfo_rec_mdark_description[] =
82 "This recipe perform raw sinfo_dark data reduction.\n"
83 "The input files are raw sinfo_dark images\n"
84 "Their associated tags should be DARK.\n"
85 "The output are a master sinfo_dark (PRO.CATG=MASTER_DARK) and\n"
86 "a hot pixels bad pixel map (PRO.CATG=BP_MAP_HP)\n"
113 cpl_recipe *recipe = cpl_calloc(1,
sizeof *recipe);
114 cpl_plugin *plugin = &recipe->interface;
117 cpl_plugin_init(plugin,
119 SINFONI_BINARY_VERSION,
120 CPL_PLUGIN_TYPE_RECIPE,
122 "Master dark and hot pixels mask generation.",
123 sinfo_rec_mdark_description,
125 "Andrea.Modigliani@eso.org",
127 sinfo_rec_mdark_create,
128 sinfo_rec_mdark_exec,
129 sinfo_rec_mdark_destroy);
131 cpl_pluginlist_append(list, plugin);
146 static int sinfo_rec_mdark_create(cpl_plugin *plugin)
148 cpl_recipe * recipe ;
151 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
152 recipe = (cpl_recipe *)plugin ;
158 recipe->parameters = cpl_parameterlist_new() ;
164 sinfo_general_config_add(recipe->parameters);
166 sinfo_dark_config_add(recipe->parameters);
177 static int sinfo_rec_mdark_exec(cpl_plugin *plugin)
179 cpl_recipe * recipe ;
181 cpl_errorstate initial_errorstate = cpl_errorstate_get();
184 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
185 recipe = (cpl_recipe *)plugin ;
188 if (!cpl_errorstate_is_equal(initial_errorstate)) {
191 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
194 return sinfo_rec_mdark(recipe->parameters, recipe->frames);
204 static int sinfo_rec_mdark_destroy(cpl_plugin *plugin)
206 cpl_recipe * recipe ;
209 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
210 recipe = (cpl_recipe *)plugin ;
213 cpl_parameterlist_delete(recipe->parameters) ;
232 sinfo_rec_mdark(cpl_parameterlist *config, cpl_frameset *
set)
235 cpl_parameter* p=NULL;
237 cpl_frameset * wrk_set=NULL;
238 cpl_frameset * cdb_set=NULL;
239 cpl_frameset * tot_set=NULL;
241 cpl_frame* tmp_frm=NULL;
242 cpl_frame* dup_frm=NULL;
243 cpl_frame* cdb_frm=NULL;
245 char tmp_name[FILE_NAME_SZ];
246 char out_bpmap_name[FILE_NAME_SZ];
247 char out_dark_name[FILE_NAME_SZ];
251 cpl_vector* dit_val=NULL;
252 cpl_propertylist* plist=NULL;
263 sinfo_msg(
"Welcome to SINFONI Pipeline release %d.%d.%d",
264 SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
265 ck0(sinfo_dfs_set_groups(
set),
"Cannot indentify RAW and CALIB frames");
267 check_nomsg(p=cpl_parameterlist_find(config,
"sinfoni.general.lc_sw"));
268 check_nomsg(line_cor=cpl_parameter_get_bool(p));
270 check_nomsg(sinfo_ima_line_cor(config,
set));
274 check_nomsg(cdb_set=cpl_frameset_new());
275 check_nomsg(tot_set=cpl_frameset_new());
278 sinfo_extract_mst_frames(
set,cdb_set);
279 sinfo_bp_config_add(config);
280 nset=count_diff_ndit(
set,&dit_val);
282 check_nomsg(nraw=cpl_frameset_get_size(
set));
283 check_nomsg(ncdb=cpl_frameset_get_size(cdb_set));
285 for(i=0;i<nset;i++) {
286 check_nomsg(wrk_set=cpl_frameset_new());
287 check_nomsg(ref_dit=cpl_vector_get(dit_val,i));
290 for(j=0;j<nraw;j++) {
291 check_nomsg(tmp_frm=cpl_frameset_get_frame(
set,j));
292 check_nomsg(strcpy(tmp_name,cpl_frame_get_filename(tmp_frm)));
293 plist=cpl_propertylist_load(tmp_name,0);
294 tmp_dit=sinfo_pfits_get_dit(plist);
295 sinfo_free_propertylist(&plist);
297 if(tmp_dit==ref_dit) {
298 check_nomsg(cpl_frameset_insert(wrk_set,cpl_frame_duplicate(tmp_frm)));
302 for(j=0;j<ncdb;j++) {
303 check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,j));
304 check_nomsg(cpl_frameset_insert(wrk_set,cpl_frame_duplicate(cdb_frm)));
308 ck0(sinfo_dfs_set_groups(wrk_set),
"Cannot indentify RAW and CALIB frames");
311 check_nomsg(p = cpl_parameterlist_find(config,
"sinfoni.bp.method"));
312 check_nomsg(cpl_parameter_set_string(p,
"Noise"));
313 ck0(sinfo_dfs_set_groups(
set),
"Cannot indentify RAW and CALIB frames") ;
316 sprintf(out_bpmap_name,
"%s%d%s",
"out_bp_noise",i,
".fits");
318 strcpy(out_bpmap_name,
"out_bp_noise.fits");
321 sinfo_msg(
"-----------------------------------------------");
322 sinfo_msg(
"BP_MAP_HP BAD PIXEL MAP DETERMINATION ");
323 sinfo_msg(
"-----------------------------------------------");
325 ck0(sinfo_new_bp_search_noise(cpl_func,config,wrk_set,out_bpmap_name),
326 "computing BP_MAP_HP") ;
327 sinfo_msg(
"BP_MAP_HP BAD PIXEL MAP DETERMINATION SUCCESS") ;
329 sinfo_msg(
"-----------------------------------------------");
330 sinfo_msg(
"MASTER DARK DETERMINATION ");
331 sinfo_msg(
"-----------------------------------------------");
334 sprintf(out_dark_name,
"%s%d%s",
"out_dark",i,
".fits");
336 strcpy(out_dark_name,
"out_dark.fits");
339 ck0(sinfo_new_dark(cpl_func,config, wrk_set, out_dark_name),
340 "Computing master dark") ;
341 sinfo_msg(
"MASTER DARK DETERMINATION SUCCESS") ;
343 nred=cpl_frameset_get_size(wrk_set);
344 for(j=0;j<nred;j++) {
345 check_nomsg(tmp_frm=cpl_frameset_get_frame(wrk_set,j));
346 check_nomsg(cpl_frameset_insert(tot_set,cpl_frame_duplicate(tmp_frm)));
348 sinfo_free_frameset(&wrk_set);
352 check_nomsg(ntot=cpl_frameset_get_size(tot_set));
353 for(j=0;j<ntot;j++) {
354 check_nomsg(tmp_frm=cpl_frameset_get_frame(tot_set,j));
355 check_nomsg(cpl_frameset_insert(
set,cpl_frame_duplicate(tmp_frm)));
358 sinfo_free_frameset(&tot_set);
359 sinfo_free_my_vector(&dit_val);
360 sinfo_free_frameset(&cdb_set);
369 sinfo_free_propertylist(&plist);
370 sinfo_free_frame(&dup_frm);
371 sinfo_free_frameset(&wrk_set);
372 sinfo_free_frameset(&tot_set);
373 sinfo_free_my_vector(&dit_val);
374 sinfo_free_frameset(&cdb_set);
377 if (cpl_error_get_code() != CPL_ERROR_NONE) {
387 static int count_diff_ndit(cpl_frameset *
set, cpl_vector** dit_val)
389 cpl_frame* tmp_frm=NULL;
390 cpl_frame* dup_frm=NULL;
393 char tmp_name[FILE_NAME_SZ];
398 cpl_vector* dit=NULL;
399 cpl_propertylist* plist=NULL;
401 nraw=cpl_frameset_get_size(
set);
402 dit=cpl_vector_new(nraw);
403 for(i=0;i<nraw;i++) {
404 tmp_frm = cpl_frameset_get_frame(
set, i);
405 strcpy(tmp_name,cpl_frame_get_filename(tmp_frm));
406 plist= cpl_propertylist_load(tmp_name,0);
407 cpl_vector_set(dit,i,sinfo_pfits_get_dit(plist));
408 sinfo_free_propertylist(&plist);
412 cpl_vector_sort(dit,1);
413 ref_dit=cpl_vector_get(dit,0);
416 for(i=1;i<nraw;i++) {
417 if(ref_dit != cpl_vector_get(dit,i)) {
418 ref_dit=cpl_vector_get(dit,i);
422 *dit_val=cpl_vector_new(ndit);
423 ref_dit=cpl_vector_get(dit,0);
424 cpl_vector_set(*dit_val,0,cpl_vector_get(dit,0));
427 for(i=1;i<nraw;i++) {
428 if(ref_dit != cpl_vector_get(dit,i)) {
429 cpl_vector_set(*dit_val,ndit,cpl_vector_get(dit,i));
430 ref_dit=cpl_vector_get(dit,i);
435 cpl_vector_delete(dit);
436 cpl_frame_delete(dup_frm);