37 #include "vircam_utils.h"
38 #include "vircam_dfs.h"
39 #include "vircam_fits.h"
40 #include "vircam_mods.h"
44 static int vircam_destripe_create(cpl_plugin *) ;
45 static int vircam_destripe_exec(cpl_plugin *) ;
46 static int vircam_destripe_destroy(cpl_plugin *) ;
47 static int vircam_destripe_test(cpl_parameterlist *, cpl_frameset *) ;
48 static int vircam_destripe_save(cpl_frameset *framelist,
49 cpl_parameterlist *parlist);
50 static int vircam_destripe_lastbit(
int jext, cpl_frameset *framelist,
51 cpl_parameterlist *parlist);
52 static void vircam_destripe_init(
void);
53 static void vircam_destripe_tidy(
int level);
61 } vircam_destripe_config;
72 static cpl_frame *product_frame = NULL;
75 static char vircam_destripe_description[] =
76 "vircam_destripe -- VIRCAM destripe correction test recipe.\n\n"
77 "Destripe an input frame.\n\n"
78 "The program accepts the following files in the SOF:\n\n"
80 " -----------------------------------------------------------------------\n"
81 " %-21s A input uncorrected image\n"
82 " %-21s Optional master bad pixel map or\n"
83 " %-21s Optional master confidence map\n"
144 int cpl_plugin_get_info(cpl_pluginlist *list) {
145 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
146 cpl_plugin *plugin = &recipe->interface;
147 char alldesc[SZ_ALLDESC];
148 (void)snprintf(alldesc,SZ_ALLDESC,vircam_destripe_description,
149 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_BPM,VIRCAM_CAL_CONF);
151 cpl_plugin_init(plugin,
153 VIRCAM_BINARY_VERSION,
154 CPL_PLUGIN_TYPE_RECIPE,
156 "VIRCAM destripe correction test recipe [test]",
161 vircam_destripe_create,
162 vircam_destripe_exec,
163 vircam_destripe_destroy);
165 cpl_pluginlist_append(list,plugin);
181 static int vircam_destripe_create(cpl_plugin *plugin) {
187 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
188 recipe = (cpl_recipe *)plugin;
194 recipe->parameters = cpl_parameterlist_new();
198 p = cpl_parameter_new_range(
"vircam.vircam_destripe.extenum",
200 "Extension number to be done, 0 == all",
201 "vircam.vircam_destripe",1,0,16);
202 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
203 cpl_parameterlist_append(recipe->parameters,p);
218 static int vircam_destripe_exec(cpl_plugin *plugin) {
223 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
224 recipe = (cpl_recipe *)plugin;
228 return(vircam_destripe_test(recipe->parameters,recipe->frames));
239 static int vircam_destripe_destroy(cpl_plugin *plugin) {
244 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
245 recipe = (cpl_recipe *)plugin;
249 cpl_parameterlist_delete(recipe->parameters);
262 static int vircam_destripe_test(cpl_parameterlist *parlist,
263 cpl_frameset *framelist) {
264 const char *fctid=
"vircam_destripe";
266 int jst,jfn,status,j,nx,ny,retval;
271 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
272 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
278 vircam_destripe_init();
282 p = cpl_parameterlist_find(parlist,
"vircam.vircam_destripe.extenum");
283 vircam_destripe_config.extenum = cpl_parameter_get_int(p);
288 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
289 vircam_destripe_tidy(2);
297 cpl_msg_error(fctid,
"Cannot labelise the input frames");
298 vircam_destripe_tidy(2);
302 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
303 cpl_msg_info(fctid,
"No raw image found -- cannot continue");
304 vircam_destripe_tidy(2);
317 if (jst == -1 || jfn == -1) {
318 cpl_msg_error(fctid,
"Unable to continue");
319 vircam_destripe_tidy(2);
325 for (j = jst; j <= jfn; j++) {
327 isfirst = (j == jst);
333 if (ps.img == NULL) {
334 cpl_msg_info(fctid,
"Extension %" CPL_SIZE_FORMAT
" frame wouldn't load",
337 retval = vircam_destripe_lastbit(j,framelist,parlist);
353 cpl_msg_info(fctid,
"Doing the stripe correction for extension %" CPL_SIZE_FORMAT,
356 if (status != VIR_OK) {
357 cpl_msg_info(fctid,
"Extension %" CPL_SIZE_FORMAT
" destripe failed",
360 retval = vircam_destripe_lastbit(j,framelist,parlist);
367 retval = vircam_destripe_lastbit(j,framelist,parlist);
371 vircam_destripe_tidy(2);
384 static int vircam_destripe_save(cpl_frameset *framelist,
385 cpl_parameterlist *parlist) {
386 const char *fctid =
"vircam_destripe_save";
387 const char *outfile =
"destripe.fits";
388 const char *recipeid =
"vircam_destripe";
389 cpl_propertylist *plist;
398 product_frame = cpl_frame_new();
399 cpl_frame_set_filename(product_frame,outfile);
400 cpl_frame_set_tag(product_frame,VIRCAM_PRO_SIMPLE_TEST);
401 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
402 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
403 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
409 parlist,(
char *)recipeid,
410 "?Dictionary?",NULL,0);
414 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
415 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
416 cpl_msg_error(fctid,
"Cannot save product PHU");
417 cpl_frame_delete(product_frame);
420 cpl_frameset_insert(framelist,product_frame);
430 (
char *)recipeid,
"?Dictionary?",NULL);
437 plist,CPL_IO_EXTEND) != CPL_ERROR_NONE) {
438 cpl_msg_error(fctid,
"Cannot save product image extension");
455 static int vircam_destripe_lastbit(
int jext, cpl_frameset *framelist,
456 cpl_parameterlist *parlist) {
458 const char *fctid=
"vircam_destripe_lastbit";
462 cpl_msg_info(fctid,
"Saving products for extension %" CPL_SIZE_FORMAT,
464 retval = vircam_destripe_save(framelist,parlist);
466 vircam_destripe_tidy(2);
472 vircam_destripe_tidy(1);
482 static void vircam_destripe_init(
void) {
496 static void vircam_destripe_tidy(
int level) {
503 freespace(ps.labels);