37 #include "vircam_utils.h"
38 #include "vircam_dfs.h"
39 #include "vircam_fits.h"
40 #include "vircam_mods.h"
44 static int vircam_mkconf_create(cpl_plugin *) ;
45 static int vircam_mkconf_exec(cpl_plugin *) ;
46 static int vircam_mkconf_destroy(cpl_plugin *) ;
47 static int vircam_mkconf_test(cpl_parameterlist *, cpl_frameset *) ;
48 static int vircam_mkconf_save(cpl_frameset *framelist,
49 cpl_parameterlist *parlist);
50 static void vircam_mkconf_init(
void);
51 static void vircam_mkconf_tidy(
void);
59 } vircam_mkconf_config;
67 cpl_propertylist *drs;
71 static cpl_frame *product_frame = NULL;
73 static char vircam_mkconf_description[] =
74 "vircam_mkconf -- VIRCAM confidence map generation test recipe.\n\n"
75 "Create a confidence map using an input flat field and an input mask\n"
76 "The program accepts the following files in the SOF:\n\n"
78 " -----------------------------------------------------------------------\n"
79 " %-21s A input master flat field\n"
80 " %-21s A master bad pixel map or\n"
81 " %-21s A master confidence map\n"
142 int cpl_plugin_get_info(cpl_pluginlist *list) {
143 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
144 cpl_plugin *plugin = &recipe->interface;
145 char alldesc[SZ_ALLDESC];
146 (void)snprintf(alldesc,SZ_ALLDESC,vircam_mkconf_description,
147 VIRCAM_CAL_TWILIGHT_FLAT,VIRCAM_CAL_BPM,VIRCAM_CAL_CONF);
149 cpl_plugin_init(plugin,
151 VIRCAM_BINARY_VERSION,
152 CPL_PLUGIN_TYPE_RECIPE,
154 "VIRCAM confidence map test recipe [test]",
159 vircam_mkconf_create,
161 vircam_mkconf_destroy);
163 cpl_pluginlist_append(list,plugin);
179 static int vircam_mkconf_create(cpl_plugin *plugin) {
185 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
186 recipe = (cpl_recipe *)plugin;
192 recipe->parameters = cpl_parameterlist_new();
196 p = cpl_parameter_new_range(
"vircam.vircam_mkconf.extenum",
198 "Extension number to be done, 0 == all",
199 "vircam.vircam_mkconf",1,0,16);
200 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
201 cpl_parameterlist_append(recipe->parameters,p);
216 static int vircam_mkconf_exec(cpl_plugin *plugin) {
221 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
222 recipe = (cpl_recipe *)plugin;
226 return(vircam_mkconf_test(recipe->parameters,recipe->frames));
237 static int vircam_mkconf_destroy(cpl_plugin *plugin) {
242 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
243 recipe = (cpl_recipe *)plugin;
247 cpl_parameterlist_delete(recipe->parameters);
260 static int vircam_mkconf_test(cpl_parameterlist *parlist,
261 cpl_frameset *framelist) {
262 const char *fctid=
"vircam_mkconf";
264 int jst,jfn,status,j,nx,ny;
269 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
270 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
276 vircam_mkconf_init();
280 p = cpl_parameterlist_find(parlist,
"vircam.vircam_mkconf.extenum");
281 vircam_mkconf_config.extenum = cpl_parameter_get_int(p);
286 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
287 vircam_mkconf_tidy();
295 cpl_msg_error(fctid,
"Cannot labelise the input frames");
296 vircam_mkconf_tidy();
300 VIRCAM_CAL_TWILIGHT_FLAT)) == NULL) {
301 cpl_msg_info(fctid,
"No master flat found -- cannot continue");
302 vircam_mkconf_tidy();
316 if (jst == -1 || jfn == -1) {
317 cpl_msg_error(fctid,
"Unable to continue");
318 vircam_mkconf_tidy();
325 for (j = jst; j <= jfn; j++) {
326 isfirst = (j == jst);
331 if (ps.flatf == NULL) {
332 vircam_mkconf_tidy();
347 cpl_msg_info(fctid,
"Making confidence map for extension %" CPL_SIZE_FORMAT,
351 &(ps.outimg),&(ps.drs),&status);
352 if (status != VIR_OK) {
353 vircam_mkconf_tidy();
359 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
361 if (vircam_mkconf_save(framelist,parlist) != 0) {
362 vircam_mkconf_tidy();
370 freeimage(ps.outimg);
371 freepropertylist(ps.drs);
373 vircam_mkconf_tidy();
386 static int vircam_mkconf_save(cpl_frameset *framelist,
387 cpl_parameterlist *parlist) {
388 const char *recipeid =
"vircam_mkconf";
389 const char *fctid =
"vircam_mkconf_save";
390 const char *outfile =
"mkconf.fits";
391 cpl_propertylist *plist;
400 product_frame = cpl_frame_new();
401 cpl_frame_set_filename(product_frame,outfile);
402 cpl_frame_set_tag(product_frame,VIRCAM_PRO_CONF_TEST);
403 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
404 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
405 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
411 parlist,(
char *)recipeid,
412 "?Dictionary?",NULL,0);
416 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
417 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
418 cpl_msg_error(fctid,
"Cannot save product PHU");
419 cpl_frame_delete(product_frame);
422 cpl_frameset_insert(framelist,product_frame);
432 (
char *)recipeid,
"?Dictionary?",NULL);
436 if (cpl_image_save(ps.outimg,outfile,CPL_TYPE_FLOAT,plist,
437 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
438 cpl_msg_error(fctid,
"Cannot save product image extension");
452 static void vircam_mkconf_init(
void) {
468 static void vircam_mkconf_tidy(
void) {
469 freespace(ps.labels);
473 freeimage(ps.outimg);
474 freepropertylist(ps.drs);
const char * vircam_get_license(void)
int vircam_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
cpl_frame * vircam_frameset_subgroup_1(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
void vircam_mask_clear(vir_mask *m)
int vircam_mkconf(cpl_image *flat, char *flatfile, vir_mask *bpm, cpl_image **outconf, cpl_propertylist **drs, int *status)
Create a confidence map.
int vircam_mask_load(vir_mask *m, int nexten, int nx, int ny)
char * vircam_fits_get_fullname(vir_fits *p)
cpl_image * vircam_fits_get_image(vir_fits *p)
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)
vir_fits * vircam_fits_load(cpl_frame *frame, cpl_type type, int nexten)
cpl_propertylist * vircam_fits_get_ehu(vir_fits *p)
vir_mask * vircam_mask_define(cpl_frameset *framelist, cpl_size *labels, cpl_size nlab)
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)
int vircam_dfs_set_groups(cpl_frameset *set)