38 #include "vircam_utils.h"
39 #include "vircam_mask.h"
40 #include "vircam_dfs.h"
41 #include "vircam_mods.h"
42 #include "vircam_fits.h"
46 static int vircam_imstack_create(cpl_plugin *) ;
47 static int vircam_imstack_exec(cpl_plugin *) ;
48 static int vircam_imstack_destroy(cpl_plugin *) ;
49 static int vircam_imstack_test(cpl_parameterlist *, cpl_frameset *) ;
50 static int vircam_imstack_save(cpl_frameset *framelist,
51 cpl_parameterlist *parlist);
52 static void vircam_imstack_init(
void);
53 static void vircam_imstack_tidy(
void);
64 } vircam_imstack_config;
69 cpl_frameset *imagelist;
71 cpl_frameset *conflist;
73 cpl_frameset *catlist;
82 static cpl_frame *product_frame = NULL;
83 static cpl_frame *product_conf = NULL;
86 static char vircam_imstack_description[] =
87 "vircam_imstack -- VIRCAM test jitter recipe.\n\n"
88 "Dither a list of frames into an output frame.\n\n"
89 "The program accepts the following files in the SOF:\n\n"
91 " -----------------------------------------------------------------------\n"
92 " %-21s A list of images\n"
93 " %-21s A list of confidence maps\n"
94 " %-21s An optional list of object catalogues\n"
153 int cpl_plugin_get_info(cpl_pluginlist *list) {
154 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
155 cpl_plugin *plugin = &recipe->interface;
156 char alldesc[SZ_ALLDESC];
157 (void)snprintf(alldesc,SZ_ALLDESC,vircam_imstack_description,
158 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_CONF,VIRCAM_CAL_OBJCAT);
160 cpl_plugin_init(plugin,
162 VIRCAM_BINARY_VERSION,
163 CPL_PLUGIN_TYPE_RECIPE,
165 "VIRCAM jitter test recipe [test]",
170 vircam_imstack_create,
172 vircam_imstack_destroy);
174 cpl_pluginlist_append(list,plugin);
190 static int vircam_imstack_create(cpl_plugin *plugin) {
196 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
197 recipe = (cpl_recipe *)plugin;
203 recipe->parameters = cpl_parameterlist_new();
207 p = cpl_parameter_new_enum(
"vircam.vircam_imstack.method",
208 CPL_TYPE_INT,
"Combination method",
209 "vircam.vircam_imstack",0,2,0,1);
210 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"method");
211 cpl_parameterlist_append(recipe->parameters,p);
216 p = cpl_parameter_new_range(
"vircam.vircam_imstack.extenum",
218 "Extension number to be done, 0 == all",
219 "vircam.vircam_imstack",
221 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
222 cpl_parameterlist_append(recipe->parameters,p);
238 static int vircam_imstack_exec(cpl_plugin *plugin) {
243 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
244 recipe = (cpl_recipe *)plugin;
248 return(vircam_imstack_test(recipe->parameters,recipe->frames));
259 static int vircam_imstack_destroy(cpl_plugin *plugin) {
264 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
265 recipe = (cpl_recipe *)plugin;
269 cpl_parameterlist_delete(recipe->parameters);
282 static int vircam_imstack_test(cpl_parameterlist *parlist,
283 cpl_frameset *framelist) {
284 const char *fctid=
"vircam_imstack";
285 int j,jst,jfn,retval,status;
292 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
293 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
299 vircam_imstack_init();
303 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imstack.extenum");
304 vircam_imstack_config.extenum = cpl_parameter_get_int(p);
305 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imstack.method");
306 vircam_imstack_config.method = cpl_parameter_get_int(p);
311 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
312 vircam_imstack_tidy();
320 cpl_msg_error(fctid,
"Cannot labelise the input frames");
321 vircam_imstack_tidy();
325 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
326 cpl_msg_error(fctid,
"Cannot get images in input frameset");
327 vircam_imstack_tidy();
330 ps.nimages = cpl_frameset_get_size(ps.imagelist);
332 VIRCAM_CAL_CONF)) == NULL) {
333 cpl_msg_error(fctid,
"Cannot get confidence maps in input frameset");
334 vircam_imstack_tidy();
337 ps.nconfs = cpl_frameset_get_size(ps.conflist);
339 VIRCAM_CAL_OBJCAT)) == NULL) {
340 cpl_msg_info(fctid,
"No object catalogues found -- no matching done");
348 (
const cpl_frame *)cpl_frameset_get_frame(ps.imagelist,0),
350 if (jst == -1 || jfn == -1) {
351 cpl_msg_error(fctid,
"Unable to continue");
352 vircam_imstack_tidy();
359 for (j = jst; j <= jfn; j++) {
360 isfirst = (j == jst);
366 if (ps.catlist != NULL)
371 cpl_msg_info(fctid,
"Doing jittering for extension %" CPL_SIZE_FORMAT,
373 (void)
vircam_imstack(ps.images,ps.confs,ps.cats,ps.nimages,ps.nconfs,
374 5.0,5.0,vircam_imstack_config.method,0,
375 &(ps.outfits),&(ps.outfitsc),&status);
376 if (status != VIR_OK) {
377 vircam_imstack_tidy();
383 cpl_msg_info(fctid,
"Saving combined image extension %" CPL_SIZE_FORMAT,
385 retval = vircam_imstack_save(framelist,parlist);
387 vircam_imstack_tidy();
390 freefitslist(ps.images,ps.nimages);
391 freefitslist(ps.confs,ps.nconfs);
392 freefits(ps.outfits);
393 freefits(ps.outfitsc);
395 vircam_imstack_tidy();
408 static int vircam_imstack_save(cpl_frameset *framelist,
409 cpl_parameterlist *parlist) {
410 cpl_propertylist *plist;
411 const char *recipeid =
"vircam_imstack";
412 const char *fctid =
"vircam_imstack_save";
413 const char *outfile =
"comb.fits";
414 const char *outconf =
"combconf.fits";
423 product_frame = cpl_frame_new();
424 cpl_frame_set_filename(product_frame,outfile);
425 cpl_frame_set_tag(product_frame,VIRCAM_PRO_JITTERED_TEST);
426 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
427 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
428 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
434 parlist,(
char *)recipeid,
435 "?Dictionary?",NULL,0);
439 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
440 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
441 cpl_msg_error(fctid,
"Cannot save product PHU");
442 cpl_frame_delete(product_frame);
445 cpl_frameset_insert(framelist,product_frame);
449 product_conf = cpl_frame_new();
450 cpl_frame_set_filename(product_conf,outconf);
451 cpl_frame_set_tag(product_conf,VIRCAM_PRO_CONF_TEST);
452 cpl_frame_set_type(product_conf,CPL_FRAME_TYPE_IMAGE);
453 cpl_frame_set_group(product_conf,CPL_FRAME_GROUP_PRODUCT);
454 cpl_frame_set_level(product_conf,CPL_FRAME_LEVEL_FINAL);
458 if (cpl_image_save(NULL,outconf,CPL_TYPE_UCHAR,plist,
459 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
460 cpl_msg_error(fctid,
"Cannot save product PHU");
461 cpl_frame_delete(product_conf);
464 cpl_frameset_insert(framelist,product_conf);
474 parlist,(
char *)recipeid,
475 "?Dictionary?",NULL);
480 CPL_TYPE_FLOAT,plist,
481 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
482 cpl_msg_error(fctid,
"Cannot save dithered image extension");
489 CPL_TYPE_SHORT,plist,
490 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
491 cpl_msg_error(fctid,
"Cannot save confidence map image extension");
506 static void vircam_imstack_init(
void) {
524 static void vircam_imstack_tidy(
void) {
525 freespace(ps.labels);
526 freeframeset(ps.imagelist);
527 freeframeset(ps.conflist);
528 freeframeset(ps.catlist);
529 freefitslist(ps.images,ps.nimages);
530 freefitslist(ps.confs,ps.nconfs);
531 freetfitslist(ps.cats,ps.nimages);
532 freefits(ps.outfits);
533 freefits(ps.outfitsc);
const char * vircam_get_license(void)
int vircam_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
vir_fits ** vircam_fits_load_list(cpl_frameset *f, cpl_type type, int exten)
int vircam_imstack(vir_fits **inf, vir_fits **inconf, vir_tfits **cats, int nimages, int nconfs, float lthr, float hthr, int method, int seeing, vir_fits **out, vir_fits **outc, int *status)
Stack images into a mean image using WCS info.
vir_tfits ** vircam_tfits_load_list(cpl_frameset *f, int exten)
cpl_image * vircam_fits_get_image(vir_fits *p)
cpl_frameset * vircam_frameset_subgroup(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
void vircam_dfs_set_product_exten_header(cpl_propertylist *plist, cpl_frame *frame, cpl_frameset *frameset, cpl_parameterlist *parlist, char *recipeid, const char *dict, cpl_frame *inherit)
void vircam_dfs_set_product_primary_header(cpl_propertylist *plist, cpl_frame *frame, cpl_frameset *frameset, cpl_parameterlist *parlist, char *recipeid, const char *dict, cpl_frame *inherit, int synch)
cpl_propertylist * vircam_fits_get_phu(vir_fits *p)
cpl_propertylist * vircam_fits_get_ehu(vir_fits *p)
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)
int vircam_dfs_set_groups(cpl_frameset *set)