37 #include "vircam_utils.h"
38 #include "vircam_dfs.h"
39 #include "vircam_fits.h"
40 #include "vircam_mods.h"
44 static int vircam_flatcor_create(cpl_plugin *) ;
45 static int vircam_flatcor_exec(cpl_plugin *) ;
46 static int vircam_flatcor_destroy(cpl_plugin *) ;
47 static int vircam_flatcor_test(cpl_parameterlist *, cpl_frameset *) ;
48 static int vircam_flatcor_save(cpl_frameset *framelist,
49 cpl_parameterlist *parlist);
50 static void vircam_flatcor_init(
void);
51 static void vircam_flatcor_tidy(
void);
59 } vircam_flatcor_config;
70 static cpl_frame *product_frame = NULL;
72 static char vircam_flatcor_description[] =
73 "vircam_flatcor -- VIRCAM flat correction test recipe.\n\n"
74 "Flat correct an input frame using a master flat frame\n\n"
75 "The program accepts the following files in the SOF:\n\n"
77 " -----------------------------------------------------------------------\n"
78 " %-21s A input uncorrected image\n"
79 " %-21s A master flat field frame\n"
139 int cpl_plugin_get_info(cpl_pluginlist *list) {
140 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
141 cpl_plugin *plugin = &recipe->interface;
142 char alldesc[SZ_ALLDESC];
143 (void)snprintf(alldesc,SZ_ALLDESC,vircam_flatcor_description,
144 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_TWILIGHT_FLAT);
146 cpl_plugin_init(plugin,
148 VIRCAM_BINARY_VERSION,
149 CPL_PLUGIN_TYPE_RECIPE,
151 "VIRCAM flat field division test recipe [test]",
156 vircam_flatcor_create,
158 vircam_flatcor_destroy);
160 cpl_pluginlist_append(list,plugin);
176 static int vircam_flatcor_create(cpl_plugin *plugin) {
182 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
183 recipe = (cpl_recipe *)plugin;
189 recipe->parameters = cpl_parameterlist_new();
193 p = cpl_parameter_new_range(
"vircam.vircam_flatcor.extenum",
195 "Extension number to be done, 0 == all",
196 "vircam.vircam_flatcor",1,0,16);
197 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
198 cpl_parameterlist_append(recipe->parameters,p);
213 static int vircam_flatcor_exec(cpl_plugin *plugin) {
218 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
219 recipe = (cpl_recipe *)plugin;
223 return(vircam_flatcor_test(recipe->parameters,recipe->frames));
235 static int vircam_flatcor_destroy(cpl_plugin *plugin) {
240 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
241 recipe = (cpl_recipe *)plugin;
245 cpl_parameterlist_delete(recipe->parameters);
258 static int vircam_flatcor_test(cpl_parameterlist *parlist,
259 cpl_frameset *framelist) {
260 const char *fctid=
"vircam_flatcor";
262 int jst,jfn,status,j;
267 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
268 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
274 vircam_flatcor_init();
278 p = cpl_parameterlist_find(parlist,
"vircam.vircam_flatcor.extenum");
279 vircam_flatcor_config.extenum = cpl_parameter_get_int(p);
284 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
285 vircam_flatcor_tidy();
293 cpl_msg_error(fctid,
"Cannot labelise the input frames");
294 vircam_flatcor_tidy();
298 VIRCAM_CAL_TWILIGHT_FLAT)) == NULL) {
299 cpl_msg_info(fctid,
"No master flat found -- cannot continue");
300 vircam_flatcor_tidy();
304 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
305 cpl_msg_info(fctid,
"No raw image found -- cannot continue");
306 vircam_flatcor_tidy();
316 if (jst == -1 || jfn == -1) {
317 cpl_msg_error(fctid,
"Unable to continue");
318 vircam_flatcor_tidy();
325 for (j = jst; j <= jfn; j++) {
326 isfirst = (j == jst);
332 if (ps.img == NULL || ps.flatf == NULL) {
333 vircam_flatcor_tidy();
339 cpl_msg_info(fctid,
"Doing the flat fielding for extension %" CPL_SIZE_FORMAT,
342 if (status != VIR_OK) {
343 vircam_flatcor_tidy();
349 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
351 if (vircam_flatcor_save(framelist,parlist) != 0) {
352 vircam_flatcor_tidy();
361 vircam_flatcor_tidy();
375 static int vircam_flatcor_save(cpl_frameset *framelist,
376 cpl_parameterlist *parlist) {
377 const char *fctid =
"vircam_flatcor_save";
378 const char *outfile =
"flatcor.fits";
379 const char *recipeid =
"vircam_flatcor";
380 cpl_propertylist *plist;
389 product_frame = cpl_frame_new();
390 cpl_frame_set_filename(product_frame,outfile);
391 cpl_frame_set_tag(product_frame,VIRCAM_PRO_SIMPLE_TEST);
392 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
393 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
394 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
400 parlist,(
char *)recipeid,
401 "?Dictionary?",NULL,0);
405 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
406 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
407 cpl_msg_error(fctid,
"Cannot save product PHU");
408 cpl_frame_delete(product_frame);
411 cpl_frameset_insert(framelist,product_frame);
421 (
char *)recipeid,
"?Dictionary?",NULL);
426 plist,CPL_IO_EXTEND) != CPL_ERROR_NONE) {
427 cpl_msg_error(fctid,
"Cannot save product image extension");
441 static void vircam_flatcor_init(
void) {
456 static void vircam_flatcor_tidy(
void) {
457 freespace(ps.labels);
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)
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)
int vircam_flatcor(vir_fits *infile, vir_fits *flatsrc, int *status)
Correct input data for flat field response.
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)
int vircam_dfs_set_groups(cpl_frameset *set)