37#include <casu_utils.h>
40#include "vircam_utils.h"
41#include "vircam_dfs.h"
42#include "vircam_mods.h"
43#include "vircam_paf.h"
47static int vircam_matchxy_create(cpl_plugin *);
48static int vircam_matchxy_exec(cpl_plugin *);
49static int vircam_matchxy_destroy(cpl_plugin *);
50static int vircam_matchxy_test(cpl_parameterlist *, cpl_frameset *);
51static int vircam_matchxy_save(
void);
52static void vircam_matchxy_init(
void);
53static void vircam_matchxy_tidy(
void);
67} vircam_matchxy_config;
72 cpl_frameset *catlist;
80static char vircam_matchxy_description[] =
81"vircam_matchxy -- VIRCAM recipe to test vircam_matchxy.\n\n"
82"Match a catalogue with another to get x,y offsets\n\n"
83"The program accepts the following files in the SOF:\n\n"
85" -----------------------------------------------------------------------\n"
86" %-21s Input catalogues of objects extracted from an image\n"
139int 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_matchxy_description,
146 cpl_plugin_init(plugin,
148 VIRCAM_BINARY_VERSION,
149 CPL_PLUGIN_TYPE_RECIPE,
151 "VIRCAM catalogue matching test recipe [test]",
156 vircam_matchxy_create,
158 vircam_matchxy_destroy);
160 cpl_pluginlist_append(list,plugin);
176static int vircam_matchxy_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_matchxy.extenum",
195 "Extension number to be done, 0 == all",
196 "vircam.vircam_matchxy",1,0,16);
197 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
198 cpl_parameterlist_append(recipe->parameters,p);
213static int vircam_matchxy_exec(cpl_plugin *plugin) {
218 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
219 recipe = (cpl_recipe *)plugin;
223 return(vircam_matchxy_test(recipe->parameters,recipe->frames));
234static int vircam_matchxy_destroy(cpl_plugin *plugin) {
239 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
240 recipe = (cpl_recipe *)plugin;
244 cpl_parameterlist_delete(recipe->parameters);
257static int vircam_matchxy_test(cpl_parameterlist *parlist,
258 cpl_frameset *framelist) {
259 const char *fctid=
"vircam_matchxy";
261 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_matchxy_init();
278 p = cpl_parameterlist_find(parlist,
"vircam.vircam_matchxy.extenum");
279 vircam_matchxy_config.extenum = cpl_parameter_get_int(p);
284 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
285 vircam_matchxy_tidy();
293 cpl_msg_error(fctid,
"Cannot labelise the input frames");
294 vircam_matchxy_tidy();
298 VIRCAM_CAL_OBJCAT)) == NULL) {
299 cpl_msg_error(fctid,
"No object catalogues found -- cannot continue");
300 vircam_matchxy_tidy();
303 ps.cat1 = cpl_frameset_get_position(ps.catlist,0);
304 ps.cat2 = cpl_frameset_get_position(ps.catlist,1);
305 if (ps.cat1 == NULL || ps.cat2 == NULL) {
306 cpl_msg_error(fctid,
"List does not contain two object catalogues");
307 vircam_matchxy_tidy();
316 (
const cpl_frame *)ps.cat1,&jst,&jfn);
317 if (jst == -1 || jfn == -1) {
318 cpl_msg_error(fctid,
"Unable to continue");
319 vircam_matchxy_tidy();
326 for (j = jst; j <= jfn; j++) {
332 if (ps.cat1f == NULL || ps.cat2f == NULL) {
333 cpl_msg_warning(fctid,
"No matching done");
339 cpl_msg_info(fctid,
"Doing the matching for extension %" CPL_SIZE_FORMAT,
343 &(vircam_matchxy_config.xoff),
344 &(vircam_matchxy_config.yoff),
345 &(vircam_matchxy_config.nm),&out,&status);
347 if (status != CASU_OK) {
348 cpl_msg_warning(fctid,
"No matching results done");
354 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
356 if (vircam_matchxy_save() != 0)
357 cpl_msg_warning(fctid,
"No matching results saved");
364 vircam_matchxy_tidy();
375static int vircam_matchxy_save(
void) {
376 const char *fctid =
"vircam_matchxy_save";
377 const char *outfile =
"matchxy";
378 cpl_propertylist *p,*p2,*p3;
387 cpl_propertylist_update_string(p,
"DATE-OBS",
"ABC");
391 p2 = vircam_paf_req_items(p);
394 freepropertylist(p3);
398 cpl_propertylist_update_float(p2,
"ESO QC XOFF",vircam_matchxy_config.xoff);
399 cpl_propertylist_set_comment(p2,
"ESO QC XOFF",
400 "Calculated X offset (pixels)");
401 cpl_propertylist_update_float(p2,
"ESO QC YOFF",vircam_matchxy_config.yoff);
402 cpl_propertylist_set_comment(p2,
"ESO QC YOFF",
403 "Calculated Y offset (pixels)");
404 cpl_propertylist_update_int(p2,
"ESO QC NUMMATCH",
405 vircam_matchxy_config.nm);
406 cpl_propertylist_set_comment(p2,
"ESO QC NUMMATCH",
407 "Number of matching objects");
411 if (vircam_paf_print((
char *)outfile,
"VIRCAM/vircam_matchxy",
412 "Test output file",p2) != CASU_OK) {
413 cpl_msg_error(fctid,
"Unable to write PAF");
414 cpl_propertylist_delete(p2);
417 cpl_propertylist_delete(p2);
429static void vircam_matchxy_init(
void) {
445static void vircam_matchxy_tidy(
void) {
446 freespace(ps.labels);
449 freeframeset(ps.catlist);
int casu_matchxy(cpl_table *progtab, cpl_table *template, float srad, float *xoffset, float *yoffset, int *nm, cpl_table **outtab, int *status)
Match two lists of x,y coordinates from two tables to find the cartesian offset between them.
cpl_propertylist * casu_tfits_get_ehu(casu_tfits *p)
casu_tfits * casu_tfits_load(cpl_frame *table, int nexten)
cpl_propertylist * casu_tfits_get_phu(casu_tfits *p)
cpl_table * casu_tfits_get_table(casu_tfits *p)
int casu_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
Compare input tags.
void casu_merge_propertylists(cpl_propertylist *p1, cpl_propertylist *p2)
Merge two propertylists.
cpl_frameset * casu_frameset_subgroup(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
Extract a frameset from another frameset.
int vircam_dfs_set_groups(cpl_frameset *set)
const char * vircam_get_license(void)
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)