37#include <casu_utils.h>
40#include "vircam_utils.h"
41#include "vircam_dfs.h"
42#include "vircam_mods.h"
46static int vircam_defringe_create(cpl_plugin *) ;
47static int vircam_defringe_exec(cpl_plugin *) ;
48static int vircam_defringe_destroy(cpl_plugin *) ;
49static int vircam_defringe_test(cpl_parameterlist *, cpl_frameset *) ;
50static int vircam_defringe_save(cpl_frameset *framelist,
51 cpl_parameterlist *parlist);
52static int vircam_defringe_lastbit(
int jext, cpl_frameset *framelist,
53 cpl_parameterlist *parlist);
54static void vircam_defringe_init(
void);
55static void vircam_defringe_tidy(
int level);
64} vircam_defringe_config;
77static cpl_frame *product_frame = NULL;
79static char vircam_defringe_description[] =
80"vircam_defringe -- VIRCAM defringe test recipe.\n\n"
81"Defringe an input frame using a master fringe frame\n\n"
82"The program accepts the following files in the SOF:\n\n"
84" -----------------------------------------------------------------------\n"
85" %-21s A input uncorrected image\n"
86" %-21s A master fringe frame\n"
87" %-21s Optional master bad pixel map or\n"
88" %-21s Optional master confidence map\n"
150int 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_defringe_description,
155 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_FRINGE,VIRCAM_CAL_BPM,
158 cpl_plugin_init(plugin,
160 VIRCAM_BINARY_VERSION,
161 CPL_PLUGIN_TYPE_RECIPE,
163 "VIRCAM fringe correction test recipe [test]",
168 vircam_defringe_create,
169 vircam_defringe_exec,
170 vircam_defringe_destroy);
172 cpl_pluginlist_append(list,plugin);
188static int vircam_defringe_create(cpl_plugin *plugin) {
194 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
195 recipe = (cpl_recipe *)plugin;
201 recipe->parameters = cpl_parameterlist_new();
205 p = cpl_parameter_new_value(
"vircam.vircam_defringe.nbsize",
207 "Cell size in pixels",
208 "vircam.vircam_defringe",128);
209 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"nbsize");
210 cpl_parameterlist_append(recipe->parameters,p);
214 p = cpl_parameter_new_range(
"vircam.vircam_defringe.extenum",
216 "Extension number to be done, 0 == all",
217 "vircam.vircam_defringe",1,0,16);
218 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
219 cpl_parameterlist_append(recipe->parameters,p);
234static int vircam_defringe_exec(cpl_plugin *plugin) {
239 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
240 recipe = (cpl_recipe *)plugin;
244 return(vircam_defringe_test(recipe->parameters,recipe->frames));
255static int vircam_defringe_destroy(cpl_plugin *plugin) {
260 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
261 recipe = (cpl_recipe *)plugin;
265 cpl_parameterlist_delete(recipe->parameters);
278static int vircam_defringe_test(cpl_parameterlist *parlist,
279 cpl_frameset *framelist) {
280 const char *fctid=
"vircam_defringe";
282 int jst,jfn,status,j,retval,nx,ny;
287 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
288 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
294 vircam_defringe_init();
298 p = cpl_parameterlist_find(parlist,
"vircam.vircam_defringe.nbsize");
299 vircam_defringe_config.nbsize = cpl_parameter_get_int(p);
300 p = cpl_parameterlist_find(parlist,
"vircam.vircam_defringe.extenum");
301 vircam_defringe_config.extenum = cpl_parameter_get_int(p);
306 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
307 vircam_defringe_tidy(2);
315 cpl_msg_error(fctid,
"Cannot labelise the input frames");
316 vircam_defringe_tidy(2);
320 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
321 cpl_msg_info(fctid,
"No raw image found -- cannot continue");
322 vircam_defringe_tidy(2);
326 VIRCAM_CAL_FRINGE)) == NULL) {
327 cpl_msg_info(fctid,
"No fringe image found -- cannot continue");
328 vircam_defringe_tidy(2);
343 if (jst == -1 || jfn == -1) {
344 cpl_msg_error(fctid,
"Unable to continue");
345 vircam_defringe_tidy(2);
352 for (j = jst; j <= jfn; j++) {
353 isfirst = (j == jst);
359 if (ps.img == NULL || ps.fringef == NULL) {
360 cpl_msg_info(fctid,
"Extension %" CPL_SIZE_FORMAT
" frame wouldn't load",
363 retval = vircam_defringe_lastbit(j,framelist,parlist);
379 cpl_msg_info(fctid,
"Doing the fringe correction for extension %" CPL_SIZE_FORMAT,
382 vircam_defringe_config.nbsize,&status);
383 if (status != CASU_OK) {
384 cpl_msg_info(fctid,
"Extension %" CPL_SIZE_FORMAT
" defringe failed",
387 retval = vircam_defringe_lastbit(j,framelist,parlist);
394 retval = vircam_defringe_lastbit(j,framelist,parlist);
398 vircam_defringe_tidy(2);
411static int vircam_defringe_save(cpl_frameset *framelist,
412 cpl_parameterlist *parlist) {
413 const char *fctid =
"vircam_defringe_save";
414 const char *outfile =
"defringe.fits";
415 const char *recipeid =
"vircam_defringe";
416 cpl_propertylist *plist;
425 product_frame = cpl_frame_new();
426 cpl_frame_set_filename(product_frame,outfile);
427 cpl_frame_set_tag(product_frame,VIRCAM_PRO_SIMPLE_TEST);
428 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
429 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
430 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
436 parlist,(
char *)recipeid,
437 "?Dictionary?",NULL,0);
441 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
442 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
443 cpl_msg_error(fctid,
"Cannot save product PHU");
444 cpl_frame_delete(product_frame);
447 cpl_frameset_insert(framelist,product_frame);
457 (
char *)recipeid,
"?Dictionary?",NULL);
464 plist,CPL_IO_EXTEND) != CPL_ERROR_NONE) {
465 cpl_msg_error(fctid,
"Cannot save product image extension");
482static int vircam_defringe_lastbit(
int jext, cpl_frameset *framelist,
483 cpl_parameterlist *parlist) {
485 const char *fctid=
"vircam_defringe_lastbit";
489 cpl_msg_info(fctid,
"Saving products for extension %" CPL_SIZE_FORMAT,
491 retval = vircam_defringe_save(framelist,parlist);
493 vircam_defringe_tidy(2);
499 vircam_defringe_tidy(1);
510static void vircam_defringe_init(
void) {
525static void vircam_defringe_tidy(
int level) {
527 freefits(ps.fringef);
533 freeframe(ps.fringe);
534 freespace(ps.labels);
cpl_image * casu_fits_get_image(casu_fits *p)
cpl_propertylist * casu_fits_get_phu(casu_fits *p)
cpl_propertylist * casu_fits_get_ehu(casu_fits *p)
casu_fits * casu_fits_load(cpl_frame *frame, cpl_type type, int nexten)
int casu_mask_load(casu_mask *m, int nexten, int nx, int ny)
void casu_mask_clear(casu_mask *m)
casu_mask * casu_mask_define(cpl_frameset *framelist, cpl_size *labels, cpl_size nlab, const char *conftag, const char *bpmtag)
int casu_defringe(casu_fits **infiles, int nimages, casu_fits **fringes, int nfringes, casu_mask *mask, int nbsize, int *status)
Correct input data to remove fringes.
int casu_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
Compare input tags.
void casu_dummy_property(cpl_propertylist *p)
Set dummy property keyword.
cpl_frame * casu_frameset_subgroup_1(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
Extract a frame of a given label from a 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)