38 #include <casu_utils.h>
39 #include <casu_mask.h>
40 #include <casu_stats.h>
41 #include <casu_wcsutils.h>
43 #include "vircam_utils.h"
44 #include "vircam_dfs.h"
45 #include "vircam_mods.h"
49 static int vircam_interleave_create(cpl_plugin *) ;
50 static int vircam_interleave_exec(cpl_plugin *) ;
51 static int vircam_interleave_destroy(cpl_plugin *) ;
52 static int vircam_interleave_test(cpl_parameterlist *, cpl_frameset *) ;
53 static int vircam_interleave_save(cpl_frameset *framelist,
54 cpl_parameterlist *parlist);
55 static void vircam_interleave_init(
void);
56 static void vircam_interleave_tidy(
void);
66 } vircam_interleave_config;
71 cpl_frameset *imagelist;
73 cpl_frameset *conflist;
79 cpl_propertylist *plist;
83 static cpl_frame *product_frame = NULL;
84 static cpl_frame *product_conf = NULL;
86 static char vircam_interleave_description[] =
87 "vircam_interleave -- VIRCAM test interleave recipe.\n\n"
88 "Interleave a list of frames into an output frame.\n\n"
89 "The program accepts the following files in the SOF:\n\n"
91 " -----------------------------------------------------------------------\n"
92 " %-21s A list of images\n"
93 " %-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_interleave_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 interleaf test recipe [test]",
167 vircam_interleave_create,
168 vircam_interleave_exec,
169 vircam_interleave_destroy);
171 cpl_pluginlist_append(list,plugin);
187 static int vircam_interleave_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_interleave.extenum",
206 "Extension number to be done, 0 == all",
207 "vircam.vircam_interleave",
209 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
210 cpl_parameterlist_append(recipe->parameters,p);
226 static int vircam_interleave_exec(cpl_plugin *plugin) {
231 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
232 recipe = (cpl_recipe *)plugin;
236 return(vircam_interleave_test(recipe->parameters,recipe->frames));
247 static int vircam_interleave_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_interleave_test(cpl_parameterlist *parlist,
271 cpl_frameset *framelist) {
272 const char *fctid=
"vircam_interleave";
273 int j,jst,jfn,retval,status,i,nstep;
278 double refx,refy,refra,refdec,x,y;
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_interleave_init();
298 p = cpl_parameterlist_find(parlist,
"vircam.vircam_interleave.extenum");
299 vircam_interleave_config.extenum = cpl_parameter_get_int(p);
304 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
305 vircam_interleave_tidy();
313 cpl_msg_error(fctid,
"Cannot labelise the input frames");
314 vircam_interleave_tidy();
318 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
319 cpl_msg_error(fctid,
"Cannot get images in input frameset");
320 vircam_interleave_tidy();
323 ps.nimages = cpl_frameset_get_size(ps.imagelist);
324 nstep = (int)sqrt((
float)ps.nimages);
326 VIRCAM_CAL_CONF)) == NULL) {
327 cpl_msg_error(fctid,
"Cannot get confidence maps in input frameset");
328 vircam_interleave_tidy();
331 ps.nconfs = cpl_frameset_get_size(ps.conflist);
338 (
const cpl_frame *)cpl_frameset_get_position(ps.imagelist,0),
340 if (jst == -1 || jfn == -1) {
341 cpl_msg_error(fctid,
"Unable to continue");
342 vircam_interleave_tidy();
349 for (j = jst; j <= jfn; j++) {
350 isfirst = (j == jst);
363 for (i = 0; i < ps.nimages; i++) {
366 val =
casu_med(cpl_image_get_data_float(image),NULL,npts);
368 "ESO DRS BACKMED",val);
371 a = cpl_wcs_get_image_dims(wcs);
372 dims = cpl_array_get_data_int_const(a);
373 refx = 0.5*(double)dims[0];
374 refy = 0.5*(double)dims[1];
381 "ESO DRS XOFFMICRO",x);
383 "ESO DRS YOFFMICRO",y);
389 cpl_msg_info(fctid,
"Doing interleaving for extension %" CPL_SIZE_FORMAT,
392 nstep,&(ps.plist),&(ps.outimage),&(ps.outconf),
394 if (status != CASU_OK) {
395 vircam_interleave_tidy();
401 cpl_msg_info(fctid,
"Saving combined image extension %" CPL_SIZE_FORMAT,
403 retval = vircam_interleave_save(framelist,parlist);
405 vircam_interleave_tidy();
408 freefitslist(ps.images,ps.nimages);
409 freefitslist(ps.confs,ps.nconfs);
410 freeimage(ps.outimage);
411 freeimage(ps.outconf);
412 freepropertylist(ps.plist);
414 vircam_interleave_tidy();
429 static int vircam_interleave_save(cpl_frameset *framelist,
430 cpl_parameterlist *parlist) {
431 cpl_propertylist *plist;
432 const char *recipeid =
"vircam_interleave";
433 const char *fctid =
"vircam_interleave_save";
434 const char *outfile =
"comb.fits";
435 const char *outconf =
"combconf.fits";
444 product_frame = cpl_frame_new();
445 cpl_frame_set_filename(product_frame,outfile);
446 cpl_frame_set_tag(product_frame,VIRCAM_PRO_INTER_TEST);
447 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_IMAGE);
448 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
449 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
455 parlist,(
char *)recipeid,
456 "?Dictionary?",NULL,0);
460 if (cpl_image_save(NULL,outfile,CPL_TYPE_UCHAR,plist,
461 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
462 cpl_msg_error(fctid,
"Cannot save product PHU");
463 cpl_frame_delete(product_frame);
466 cpl_frameset_insert(framelist,product_frame);
470 product_conf = cpl_frame_new();
471 cpl_frame_set_filename(product_conf,outconf);
472 cpl_frame_set_tag(product_conf,VIRCAM_PRO_CONF_TEST);
473 cpl_frame_set_type(product_conf,CPL_FRAME_TYPE_IMAGE);
474 cpl_frame_set_group(product_conf,CPL_FRAME_GROUP_PRODUCT);
475 cpl_frame_set_level(product_conf,CPL_FRAME_LEVEL_FINAL);
479 if (cpl_image_save(NULL,outconf,CPL_TYPE_UCHAR,plist,
480 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
481 cpl_msg_error(fctid,
"Cannot save product PHU");
482 cpl_frame_delete(product_conf);
485 cpl_frameset_insert(framelist,product_conf);
495 parlist,(
char *)recipeid,
496 "?Dictionary?",NULL);
500 if (cpl_image_save(ps.outimage,outfile,CPL_TYPE_FLOAT,plist,
501 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
502 cpl_msg_error(fctid,
"Cannot save interleaved image extension");
508 if (cpl_image_save(ps.outconf,outconf,CPL_TYPE_SHORT,plist,
509 CPL_IO_EXTEND) != CPL_ERROR_NONE) {
510 cpl_msg_error(fctid,
"Cannot save confidence map image extension");
525 static void vircam_interleave_init(
void) {
542 static void vircam_interleave_tidy(
void) {
543 freespace(ps.labels);
544 freeframeset(ps.imagelist);
545 freefitslist(ps.images,ps.nimages);
546 freeframeset(ps.conflist);
547 freefitslist(ps.confs,ps.nconfs);
548 freeimage(ps.outimage);
549 freeimage(ps.outconf);
550 freepropertylist(ps.plist);
cpl_image * casu_fits_get_image(casu_fits *p)
casu_fits ** casu_fits_load_list(cpl_frameset *f, cpl_type type, int exten)
cpl_propertylist * casu_fits_get_phu(casu_fits *p)
cpl_propertylist * casu_fits_get_ehu(casu_fits *p)
float casu_med(float *data, unsigned char *bpm, long npts)
int casu_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
Compare input tags.
long casu_getnpts(cpl_image *in)
Get the number of pixels in a 2d image.
cpl_frameset * casu_frameset_subgroup(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
Extract a frameset from another frameset.
void casu_radectoxy(cpl_wcs *wcs, double ra, double dec, double *x, double *y)
void casu_xytoradec(cpl_wcs *wcs, double x, double y, double *ra, double *dec)
int vircam_interleave(casu_fits **infiles, int ninputs, casu_fits **inconfs, int nconfs, int nsteps, cpl_propertylist **p, cpl_image **outimage, cpl_image **outconf, int *status)
Interleave a set of microstepped observations.
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)