41 #include <irplib_utils.h>
43 #include <sinfo_tpl_utils.h>
44 #include <sinfo_pfits.h>
45 #include <sinfo_tpl_dfs.h>
46 #include <sinfo_key_names.h>
47 #include <sinfo_pro_types.h>
48 #include <sinfo_functions.h>
49 #include <sinfo_image_ops.h>
50 #include <sinfo_msg.h>
51 #include <sinfo_error.h>
52 #include <sinfo_utils_wrappers.h>
58 static int sinfo_utl_ima_line_corr_create(cpl_plugin *) ;
59 static int sinfo_utl_ima_line_corr_exec(cpl_plugin *) ;
60 static int sinfo_utl_ima_line_corr_destroy(cpl_plugin *) ;
61 static int sinfo_utl_ima_line_corr(cpl_parameterlist *, cpl_frameset *) ;
67 static char sinfo_utl_ima_line_corr_description[] =
68 "This recipe performs image computation.\n"
69 "The input files are images\n"
70 "their associated tags should be IMA.\n"
71 "The output are the images cleaned by the defect introduced by SINFONI sw\n"
95 cpl_recipe * recipe = cpl_calloc(1,
sizeof *recipe ) ;
96 cpl_plugin * plugin = &recipe->interface ;
98 cpl_plugin_init(plugin,
100 SINFONI_BINARY_VERSION,
101 CPL_PLUGIN_TYPE_RECIPE,
102 "sinfo_utl_ima_line_corr",
103 "Computes result of ima1 op ima2",
104 sinfo_utl_ima_line_corr_description,
106 "Andrea.Modigliani@eso.org",
108 sinfo_utl_ima_line_corr_create,
109 sinfo_utl_ima_line_corr_exec,
110 sinfo_utl_ima_line_corr_destroy) ;
112 cpl_pluginlist_append(list, plugin) ;
127 static int sinfo_utl_ima_line_corr_create(cpl_plugin * plugin)
129 cpl_recipe * recipe ;
133 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
134 recipe = (cpl_recipe *)plugin ;
140 recipe->parameters = cpl_parameterlist_new() ;
143 p = cpl_parameter_new_value(
"sinfoni.sinfo_utl_ima_line_corr.kappa",
146 "sinfoni.sinfo_utl_ima_line_corr",18);
147 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"kappa") ;
148 cpl_parameterlist_append(recipe->parameters, p) ;
150 p = cpl_parameter_new_value(
"sinfoni.sinfo_utl_ima_line_corr.filt_rad",
152 "Filtering radii applied during median filter."
154 "sinfoni.sinfo_utl_ima_line_corr",3) ;;
155 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"filt_rad") ;
156 cpl_parameterlist_append(recipe->parameters, p) ;
169 static int sinfo_utl_ima_line_corr_exec(cpl_plugin * plugin)
171 cpl_recipe * recipe ;
173 cpl_errorstate initial_errorstate = cpl_errorstate_get();
176 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
177 recipe = (cpl_recipe *)plugin ;
181 code = sinfo_utl_ima_line_corr(recipe->parameters, recipe->frames) ;
184 if (!cpl_errorstate_is_equal(initial_errorstate)) {
187 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
200 static int sinfo_utl_ima_line_corr_destroy(cpl_plugin * plugin)
202 cpl_recipe * recipe ;
205 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
206 recipe = (cpl_recipe *)plugin ;
209 cpl_parameterlist_delete(recipe->parameters) ;
222 sinfo_utl_ima_line_corr( cpl_parameterlist * parlist,
223 cpl_frameset * framelist)
225 cpl_parameter * p= NULL ;
230 cpl_image * ima=NULL ;
231 cpl_image * ima_out=NULL ;
232 cpl_propertylist * plist=NULL ;
233 cpl_frame * product_frame=NULL;
234 cpl_frameset * raw_set=NULL;
236 cpl_frame * frm=NULL;
237 char name_o[MAX_NAME_SIZE];
238 const char* name=NULL;
241 sinfo_msg(
"Welcome to SINFONI Pipeline release %d.%d.%d",
242 SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
246 check_nomsg(p=cpl_parameterlist_find(parlist,
247 "sinfoni.sinfo_utl_ima_line_corr.kappa"));
248 check_nomsg(kappa=cpl_parameter_get_int(p));
251 check_nomsg(p=cpl_parameterlist_find(parlist,
252 "sinfoni.sinfo_utl_ima_line_corr.filt_rad"));
253 check_nomsg(filt_rad = cpl_parameter_get_int(p)) ;
256 check(sinfo_dfs_set_groups(framelist),
257 "Cannot identify RAW and CALIB frames") ;
260 n=cpl_frameset_get_size(framelist);
265 raw_set=cpl_frameset_new();
266 ck0_nomsg(sinfo_extract_raw_frames(framelist, &raw_set));
267 n=cpl_frameset_get_size(raw_set);
275 check_nomsg(frm=cpl_frameset_get_frame(raw_set,0));
276 check_nomsg(name=cpl_frame_get_filename(frm));
277 check_nomsg(ima=cpl_image_load(name,CPL_TYPE_FLOAT,0,0));
279 check_nomsg(sinfo_image_line_corr(width,filt_rad,kappa,ima,&ima_out));
281 sprintf(name_o,
"%s%d%s",
"ima_cor",i,
".fits") ;
284 check_nomsg(product_frame = cpl_frame_new());
285 check_nomsg(cpl_frame_set_filename(product_frame, name_o));
286 check_nomsg(cpl_frame_set_tag(product_frame,
"IMA_COR"));
287 check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE));
288 check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT));
289 check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
290 "Error while initialising the product frame") ;
305 check(cpl_image_save(ima_out,
310 "Could not save product");
311 sinfo_free_propertylist(&plist) ;
312 sinfo_free_image(&ima_out);
313 sinfo_free_image(&ima);
316 check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
321 sinfo_free_image(&ima);
322 sinfo_free_image(&ima_out);
331 if (cpl_error_get_code()) {