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_imdither_create(cpl_plugin *) ;
47 static int vircam_imdither_exec(cpl_plugin *) ;
48 static int vircam_imdither_destroy(cpl_plugin *) ;
49 static int vircam_imdither_test(cpl_parameterlist *, cpl_frameset *) ;
50 static int vircam_imdither_save(cpl_frameset *framelist,
51 cpl_parameterlist *parlist);
52 static void vircam_imdither_init(
void);
53 static void vircam_imdither_tidy(
void);
63 } vircam_imdither_config;
68 cpl_frameset *imagelist;
70 cpl_frameset *conflist;
76 cpl_propertylist *plist;
80 static cpl_frame *product_frame = NULL;
81 static cpl_frame *product_conf = NULL;
84 static char vircam_imdither_description[] =
85 "vircam_imdither -- VIRCAM test jitter recipe.\n\n"
86 "Dither a list of frames into an output frame.\n\n"
87 "The program accepts the following files in the SOF:\n\n"
89 " -----------------------------------------------------------------------\n"
90 " %-21s A list of images\n"
91 " %-21s A list of confidence maps\n"
150 int cpl_plugin_get_info(cpl_pluginlist *list) {
151 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
152 cpl_plugin *plugin = &recipe->interface;
153 char alldesc[SZ_ALLDESC];
154 (void)snprintf(alldesc,SZ_ALLDESC,vircam_imdither_description,
155 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_CONF);
157 cpl_plugin_init(plugin,
159 VIRCAM_BINARY_VERSION,
160 CPL_PLUGIN_TYPE_RECIPE,
162 "VIRCAM jitter test recipe [test]",
167 vircam_imdither_create,
168 vircam_imdither_exec,
169 vircam_imdither_destroy);
171 cpl_pluginlist_append(list,plugin);
187 static int vircam_imdither_create(cpl_plugin *plugin) {
193 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
194 recipe = (cpl_recipe *)plugin;
200 recipe->parameters = cpl_parameterlist_new();
204 p = cpl_parameter_new_range(
"vircam.vircam_imdither.extenum",
206 "Extension number to be done, 0 == all",
207 "vircam.vircam_imdither",
209 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
210 cpl_parameterlist_append(recipe->parameters,p);
226 static int vircam_imdither_exec(cpl_plugin *plugin) {
231 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
232 recipe = (cpl_recipe *)plugin;
236 return(vircam_imdither_test(recipe->parameters,recipe->frames));
247 static int vircam_imdither_destroy(cpl_plugin *plugin) {
252 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
253 recipe = (cpl_recipe *)plugin;
257 cpl_parameterlist_delete(recipe->parameters);
270 static int vircam_imdither_test(cpl_parameterlist *parlist,
271 cpl_frameset *framelist) {
272 const char *fctid=
"vircam_imdither";
273 int j,jst,jfn,retval,status;
280 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
281 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
287 vircam_imdither_init();
291 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imdither.extenum");
292 vircam_imdither_config.extenum = cpl_parameter_get_int(p);
297 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
298 vircam_imdither_tidy();
306 cpl_msg_error(fctid,
"Cannot labelise the input frames");
307 vircam_imdither_tidy();
311 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
312 cpl_msg_error(fctid,
"Cannot get images in input frameset");
313 vircam_imdither_tidy();
316 ps.nimages = cpl_frameset_get_size(ps.imagelist);
318 VIRCAM_CAL_CONF)) == NULL) {
319 cpl_msg_error(fctid,
"Cannot get confidence maps in input frameset");
320 vircam_imdither_tidy();
323 ps.nconfs = cpl_frameset_get_size(ps.conflist);
330 (
const cpl_frame *)cpl_frameset_get_frame(ps.imagelist,0),
332 if (jst == -1 || jfn == -1) {
333 cpl_msg_error(fctid,
"Unable to continue");
334 vircam_imdither_tidy();
341 for (j = jst; j <= jfn; j++) {
342 isfirst = (j == jst);
351 cpl_msg_info(fctid,
"Doing jittering for extension %" CPL_SIZE_FORMAT,
354 5.0,5.0,&(ps.plist),&(ps.outimage),
355 &(ps.outconf),&status);
356 if (status != VIR_OK) {
357 vircam_imdither_tidy();
363 cpl_msg_info(fctid,
"Saving combined image extension %" CPL_SIZE_FORMAT,
365 retval = vircam_imdither_save(framelist,parlist);
367 vircam_imdither_tidy();
370 freefitslist(ps.images,ps.nimages);
371 freefitslist(ps.confs,ps.nconfs);
372 freeimage(ps.outimage);
373 freeimage(ps.outconf);
374 freepropertylist(ps.plist);
376 vircam_imdither_tidy();
390 static int vircam_imdither_save(cpl_frameset *framelist,
391 cpl_parameterlist *parlist) {
392 cpl_propertylist *plist;
393 const char *recipeid =
"vircam_imdither";
394 const char *fctid =
"vircam_imdither_save";
395 const char *outfile =
"comb.fits";
396 const char *outconf =
"combconf.fits";
405 product_frame = cpl_frame_new();
406 cpl_frame_set_filename(product_frame,outfile);
407 cpl_frame_set_tag(product_frame,VIRCAM_PRO_JITTERED_TEST);
408 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
409 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
410 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
416 parlist,(
char *)recipeid,
417 "?Dictionary?",NULL,0);
421 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
422 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
423 cpl_msg_error(fctid,
"Cannot save product PHU");
424 cpl_frame_delete(product_frame);
427 cpl_frameset_insert(framelist,product_frame);
431 product_conf = cpl_frame_new();
432 cpl_frame_set_filename(product_conf,outconf);
433 cpl_frame_set_tag(product_conf,VIRCAM_PRO_CONF_TEST);
434 cpl_frame_set_type(product_conf,CPL_FRAME_TYPE_IMAGE);
435 cpl_frame_set_group(product_conf,CPL_FRAME_GROUP_PRODUCT);
436 cpl_frame_set_level(product_conf,CPL_FRAME_LEVEL_FINAL);
440 if (cpl_image_save(NULL,outconf,CPL_TYPE_UCHAR,plist,
441 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
442 cpl_msg_error(fctid,
"Cannot save product PHU");
443 cpl_frame_delete(product_conf);
446 cpl_frameset_insert(framelist,product_conf);
456 parlist,(
char *)recipeid,
457 "?Dictionary?",NULL);
461 if (cpl_image_save(ps.outimage,outfile,CPL_TYPE_FLOAT,plist,
462 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
463 cpl_msg_error(fctid,
"Cannot save dithered image extension");
469 if (cpl_image_save(ps.outconf,outconf,CPL_TYPE_SHORT,plist,
470 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
471 cpl_msg_error(fctid,
"Cannot save confidence map image extension");
486 static void vircam_imdither_init(
void) {
503 static void vircam_imdither_tidy(
void) {
504 freespace(ps.labels);
505 freeframeset(ps.imagelist);
506 freefitslist(ps.images,ps.nimages);
507 freeframeset(ps.conflist);
508 freefitslist(ps.confs,ps.nconfs);
509 freeimage(ps.outimage);
510 freeimage(ps.outconf);
511 freepropertylist(ps.plist);
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)
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)
int vircam_imdither(vir_fits **inf, vir_fits **inconf, int nimages, int nconfs, float lthr, float hthr, cpl_propertylist **p, cpl_image **out, cpl_image **outc, int *status)
Dither a set of jittered observations.
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)
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)
int vircam_dfs_set_groups(cpl_frameset *set)