38#include <casu_utils.h>
42#include "vircam_utils.h"
43#include "vircam_dfs.h"
44#include "vircam_mods.h"
48static int vircam_imstack_create(cpl_plugin *) ;
49static int vircam_imstack_exec(cpl_plugin *) ;
50static int vircam_imstack_destroy(cpl_plugin *) ;
51static int vircam_imstack_test(cpl_parameterlist *, cpl_frameset *) ;
52static int vircam_imstack_save(cpl_frameset *framelist,
53 cpl_parameterlist *parlist);
54static void vircam_imstack_init(
void);
55static void vircam_imstack_tidy(
void);
66} vircam_imstack_config;
71 cpl_frameset *imagelist;
73 cpl_frameset *conflist;
75 cpl_frameset *catlist;
84static cpl_frame *product_frame = NULL;
85static cpl_frame *product_conf = NULL;
88static char vircam_imstack_description[] =
89"vircam_imstack -- VIRCAM test jitter recipe.\n\n"
90"Dither a list of frames into an output frame.\n\n"
91"The program accepts the following files in the SOF:\n\n"
93" -----------------------------------------------------------------------\n"
94" %-21s A list of images\n"
95" %-21s A list of confidence maps\n"
96" %-21s An optional list of object catalogues\n"
155int cpl_plugin_get_info(cpl_pluginlist *list) {
156 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
157 cpl_plugin *plugin = &recipe->interface;
158 char alldesc[SZ_ALLDESC];
159 (void)snprintf(alldesc,SZ_ALLDESC,vircam_imstack_description,
160 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_CONF,VIRCAM_CAL_OBJCAT);
162 cpl_plugin_init(plugin,
164 VIRCAM_BINARY_VERSION,
165 CPL_PLUGIN_TYPE_RECIPE,
167 "VIRCAM jitter test recipe [test]",
172 vircam_imstack_create,
174 vircam_imstack_destroy);
176 cpl_pluginlist_append(list,plugin);
192static int vircam_imstack_create(cpl_plugin *plugin) {
198 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
199 recipe = (cpl_recipe *)plugin;
205 recipe->parameters = cpl_parameterlist_new();
209 p = cpl_parameter_new_enum(
"vircam.vircam_imstack.method",
210 CPL_TYPE_INT,
"Combination method",
211 "vircam.vircam_imstack",0,2,0,1);
212 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"method");
213 cpl_parameterlist_append(recipe->parameters,p);
218 p = cpl_parameter_new_range(
"vircam.vircam_imstack.extenum",
220 "Extension number to be done, 0 == all",
221 "vircam.vircam_imstack",
223 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
224 cpl_parameterlist_append(recipe->parameters,p);
240static int vircam_imstack_exec(cpl_plugin *plugin) {
245 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
246 recipe = (cpl_recipe *)plugin;
250 return(vircam_imstack_test(recipe->parameters,recipe->frames));
261static int vircam_imstack_destroy(cpl_plugin *plugin) {
266 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
267 recipe = (cpl_recipe *)plugin;
271 cpl_parameterlist_delete(recipe->parameters);
284static int vircam_imstack_test(cpl_parameterlist *parlist,
285 cpl_frameset *framelist) {
286 const char *fctid=
"vircam_imstack";
287 int j,jst,jfn,retval,status;
294 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
295 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
301 vircam_imstack_init();
305 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imstack.extenum");
306 vircam_imstack_config.extenum = cpl_parameter_get_int(p);
307 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imstack.method");
308 vircam_imstack_config.method = cpl_parameter_get_int(p);
313 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
314 vircam_imstack_tidy();
322 cpl_msg_error(fctid,
"Cannot labelise the input frames");
323 vircam_imstack_tidy();
327 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
328 cpl_msg_error(fctid,
"Cannot get images in input frameset");
329 vircam_imstack_tidy();
332 ps.nimages = cpl_frameset_get_size(ps.imagelist);
334 VIRCAM_CAL_CONF)) == NULL) {
335 cpl_msg_error(fctid,
"Cannot get confidence maps in input frameset");
336 vircam_imstack_tidy();
339 ps.nconfs = cpl_frameset_get_size(ps.conflist);
341 VIRCAM_CAL_OBJCAT)) == NULL) {
342 cpl_msg_info(fctid,
"No object catalogues found -- no matching done");
350 (
const cpl_frame *)cpl_frameset_get_position(ps.imagelist,0),
352 if (jst == -1 || jfn == -1) {
353 cpl_msg_error(fctid,
"Unable to continue");
354 vircam_imstack_tidy();
361 for (j = jst; j <= jfn; j++) {
362 isfirst = (j == jst);
368 if (ps.catlist != NULL)
373 cpl_msg_info(fctid,
"Doing jittering for extension %" CPL_SIZE_FORMAT,
375 (void)
casu_imstack(ps.images,ps.confs,NULL,ps.cats,ps.nimages,ps.nconfs,
376 5.0,5.0,vircam_imstack_config.method,0,1,1,
377 "EXPTIME",&(ps.outfits),&(ps.outfitsc),&outv,
379 if (status != CASU_OK) {
380 vircam_imstack_tidy();
386 cpl_msg_info(fctid,
"Saving combined image extension %" CPL_SIZE_FORMAT,
388 retval = vircam_imstack_save(framelist,parlist);
390 vircam_imstack_tidy();
393 freefitslist(ps.images,ps.nimages);
394 freefitslist(ps.confs,ps.nconfs);
395 freefits(ps.outfits);
396 freefits(ps.outfitsc);
398 vircam_imstack_tidy();
411static int vircam_imstack_save(cpl_frameset *framelist,
412 cpl_parameterlist *parlist) {
413 cpl_propertylist *plist;
414 const char *recipeid =
"vircam_imstack";
415 const char *fctid =
"vircam_imstack_save";
416 const char *outfile =
"comb.fits";
417 const char *outconf =
"combconf.fits";
426 product_frame = cpl_frame_new();
427 cpl_frame_set_filename(product_frame,outfile);
428 cpl_frame_set_tag(product_frame,VIRCAM_PRO_JITTERED_TEST);
429 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
430 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
431 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
437 parlist,(
char *)recipeid,
438 "?Dictionary?",NULL,0);
442 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
443 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
444 cpl_msg_error(fctid,
"Cannot save product PHU");
445 cpl_frame_delete(product_frame);
448 cpl_frameset_insert(framelist,product_frame);
452 product_conf = cpl_frame_new();
453 cpl_frame_set_filename(product_conf,outconf);
454 cpl_frame_set_tag(product_conf,VIRCAM_PRO_CONF_TEST);
455 cpl_frame_set_type(product_conf,CPL_FRAME_TYPE_IMAGE);
456 cpl_frame_set_group(product_conf,CPL_FRAME_GROUP_PRODUCT);
457 cpl_frame_set_level(product_conf,CPL_FRAME_LEVEL_FINAL);
461 if (cpl_image_save(NULL,outconf,CPL_TYPE_UCHAR,plist,
462 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
463 cpl_msg_error(fctid,
"Cannot save product PHU");
464 cpl_frame_delete(product_conf);
467 cpl_frameset_insert(framelist,product_conf);
477 parlist,(
char *)recipeid,
478 "?Dictionary?",NULL);
483 CPL_TYPE_FLOAT,plist,
484 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
485 cpl_msg_error(fctid,
"Cannot save dithered image extension");
492 CPL_TYPE_SHORT,plist,
493 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
494 cpl_msg_error(fctid,
"Cannot save confidence map image extension");
509static void vircam_imstack_init(
void) {
527static void vircam_imstack_tidy(
void) {
528 freespace(ps.labels);
529 freeframeset(ps.imagelist);
530 freeframeset(ps.conflist);
531 freeframeset(ps.catlist);
532 freefitslist(ps.images,ps.nimages);
533 freefitslist(ps.confs,ps.nconfs);
534 freetfitslist(ps.cats,ps.nimages);
535 freefits(ps.outfits);
536 freefits(ps.outfitsc);
cpl_image * casu_fits_get_image(casu_fits *p)
casu_fits ** casu_fits_load_list(cpl_frameset *f, cpl_type type, int exten)
cpl_propertylist * casu_fits_get_phu(casu_fits *p)
cpl_propertylist * casu_fits_get_ehu(casu_fits *p)
int casu_imstack(casu_fits **inf, casu_fits **inconf, casu_fits **invar, casu_tfits **cats, int nimages, int nconfs, float lthr, float hthr, int method, int seeing, int fast, int unmap, const char *expkey, casu_fits **out, casu_fits **outc, casu_fits **outv, int *status)
Stack images into a mean image using WCS info.
casu_tfits ** casu_tfits_load_list(cpl_frameset *f, int exten)
int casu_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
Compare input tags.
cpl_frameset * casu_frameset_subgroup(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
Extract a frameset from another frameset.
int vircam_dfs_set_groups(cpl_frameset *set)
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)
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)
const char * vircam_get_license(void)
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)