37#include <casu_utils.h>
40#include "vircam_utils.h"
41#include "vircam_dfs.h"
42#include "vircam_mods.h"
46static int vircam_darkcor_create(cpl_plugin *) ;
47static int vircam_darkcor_exec(cpl_plugin *) ;
48static int vircam_darkcor_destroy(cpl_plugin *) ;
49static int vircam_darkcor_test(cpl_parameterlist *, cpl_frameset *) ;
50static int vircam_darkcor_save(cpl_frameset *framelist,
51 cpl_parameterlist *parlist);
52static void vircam_darkcor_init(
void);
53static void vircam_darkcor_tidy(
void);
62} vircam_darkcor_config;
73static cpl_frame *product_frame = NULL;
76static char vircam_darkcor_description[] =
77"vircam_darkcor -- VIRCAM dark correction test recipe.\n\n"
78"Dark correct an input frame using a master dark frame\n\n"
79"The program accepts the following files in the SOF:\n\n"
81" -----------------------------------------------------------------------\n"
82" %-21s A input uncorrected image\n"
83" %-21s A master dark frame\n"
144int cpl_plugin_get_info(cpl_pluginlist *list) {
145 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
146 cpl_plugin *plugin = &recipe->interface;
147 char alldesc[SZ_ALLDESC];
148 (void)snprintf(alldesc,SZ_ALLDESC,vircam_darkcor_description,
149 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_DARK);
151 cpl_plugin_init(plugin,
153 VIRCAM_BINARY_VERSION,
154 CPL_PLUGIN_TYPE_RECIPE,
156 "VIRCAM dark correction test recipe [test]",
161 vircam_darkcor_create,
163 vircam_darkcor_destroy);
165 cpl_pluginlist_append(list,plugin);
181static int vircam_darkcor_create(cpl_plugin *plugin) {
187 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
188 recipe = (cpl_recipe *)plugin;
194 recipe->parameters = cpl_parameterlist_new();
198 p = cpl_parameter_new_value(
"vircam.vircam_darkcor.darkscl",
200 "Dark correction scale factor",
201 "vircam.vircam_darkcor",1.0);
202 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"darkscl");
203 cpl_parameterlist_append(recipe->parameters,p);
207 p = cpl_parameter_new_range(
"vircam.vircam_darkcor.extenum",
209 "Extension number to be done, 0 == all",
210 "vircam.vircam_darkcor",1,0,16);
211 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
212 cpl_parameterlist_append(recipe->parameters,p);
227static int vircam_darkcor_exec(cpl_plugin *plugin) {
232 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
233 recipe = (cpl_recipe *)plugin;
237 return(vircam_darkcor_test(recipe->parameters,recipe->frames));
248static int vircam_darkcor_destroy(cpl_plugin *plugin) {
253 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
254 recipe = (cpl_recipe *)plugin;
258 cpl_parameterlist_delete(recipe->parameters);
271static int vircam_darkcor_test(cpl_parameterlist *parlist,
272 cpl_frameset *framelist) {
273 const char *fctid=
"vircam_darkcor";
275 int jst,jfn,status,j;
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_darkcor_init();
291 p = cpl_parameterlist_find(parlist,
"vircam.vircam_darkcor.darkscl");
292 vircam_darkcor_config.darkscl = cpl_parameter_get_double(p);
293 p = cpl_parameterlist_find(parlist,
"vircam.vircam_darkcor.extenum");
294 vircam_darkcor_config.extenum = cpl_parameter_get_int(p);
299 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
300 vircam_darkcor_tidy();
308 cpl_msg_error(fctid,
"Cannot labelise the input frames");
309 vircam_darkcor_tidy();
313 VIRCAM_CAL_DARK)) == NULL) {
314 cpl_msg_info(fctid,
"No master dark found -- cannot continue");
315 vircam_darkcor_tidy();
319 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
320 cpl_msg_info(fctid,
"No raw image found -- cannot continue");
321 vircam_darkcor_tidy();
331 if (jst == -1 || jfn == -1) {
332 cpl_msg_error(fctid,
"Unable to continue");
333 vircam_darkcor_tidy();
340 for (j = jst; j <= jfn; j++) {
341 isfirst = (j == jst);
347 if (ps.img == NULL || ps.darkf == NULL) {
348 vircam_darkcor_tidy();
354 cpl_msg_info(fctid,
"Doing the dark correction for extension %" CPL_SIZE_FORMAT,
356 (void)
casu_darkcor(ps.imgf,ps.darkf,vircam_darkcor_config.darkscl,
358 if (status != CASU_OK) {
359 vircam_darkcor_tidy();
365 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
367 if (vircam_darkcor_save(framelist,parlist) != 0) {
368 vircam_darkcor_tidy();
377 vircam_darkcor_tidy();
390static int vircam_darkcor_save(cpl_frameset *framelist,
391 cpl_parameterlist *parlist) {
392 const char *fctid =
"vircam_darkcor_save";
393 const char *outfile =
"darkcor.fits";
394 const char *recipeid =
"vircam_darkcor";
395 cpl_propertylist *plist;
404 product_frame = cpl_frame_new();
405 cpl_frame_set_filename(product_frame,outfile);
406 cpl_frame_set_tag(product_frame,VIRCAM_PRO_SIMPLE_TEST);
407 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
408 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
409 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
415 parlist,(
char *)recipeid,
416 "?Dictionary?",NULL,0);
420 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
421 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
422 cpl_msg_error(fctid,
"Cannot save product PHU");
423 cpl_frame_delete(product_frame);
426 cpl_frameset_insert(framelist,product_frame);
436 (
char *)recipeid,
"?Dictionary?",NULL);
441 plist,CPL_IO_EXTEND) != CPL_ERROR_NONE) {
442 cpl_msg_error(fctid,
"Cannot save product image extension");
456static void vircam_darkcor_init(
void) {
471static void vircam_darkcor_tidy(
void) {
472 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_darkcor(casu_fits *infile, casu_fits *darksrc, float darkscl, int *status)
Correct input data for dark current.
int casu_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
Compare input tags.
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)