37 #include "vircam_utils.h"
38 #include "vircam_dfs.h"
39 #include "vircam_fits.h"
40 #include "vircam_mods.h"
41 #include "vircam_paf.h"
45 static int vircam_matchxy_create(cpl_plugin *);
46 static int vircam_matchxy_exec(cpl_plugin *);
47 static int vircam_matchxy_destroy(cpl_plugin *);
48 static int vircam_matchxy_test(cpl_parameterlist *, cpl_frameset *);
49 static int vircam_matchxy_save(
void);
50 static void vircam_matchxy_init(
void);
51 static void vircam_matchxy_tidy(
void);
65 } vircam_matchxy_config;
70 cpl_frameset *catlist;
78 static char vircam_matchxy_description[] =
79 "vircam_matchxy -- VIRCAM recipe to test vircam_matchxy.\n\n"
80 "Match a catalogue with another to get x,y offsets\n\n"
81 "The program accepts the following files in the SOF:\n\n"
83 " -----------------------------------------------------------------------\n"
84 " %-21s Input catalogues of objects extracted from an image\n"
137 int cpl_plugin_get_info(cpl_pluginlist *list) {
138 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
139 cpl_plugin *plugin = &recipe->interface;
140 char alldesc[SZ_ALLDESC];
141 (void)snprintf(alldesc,SZ_ALLDESC,vircam_matchxy_description,
144 cpl_plugin_init(plugin,
146 VIRCAM_BINARY_VERSION,
147 CPL_PLUGIN_TYPE_RECIPE,
149 "VIRCAM catalogue matching test recipe [test]",
154 vircam_matchxy_create,
156 vircam_matchxy_destroy);
158 cpl_pluginlist_append(list,plugin);
174 static int vircam_matchxy_create(cpl_plugin *plugin) {
180 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
181 recipe = (cpl_recipe *)plugin;
187 recipe->parameters = cpl_parameterlist_new();
191 p = cpl_parameter_new_range(
"vircam.vircam_matchxy.extenum",
193 "Extension number to be done, 0 == all",
194 "vircam.vircam_matchxy",1,0,16);
195 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
196 cpl_parameterlist_append(recipe->parameters,p);
211 static int vircam_matchxy_exec(cpl_plugin *plugin) {
216 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
217 recipe = (cpl_recipe *)plugin;
221 return(vircam_matchxy_test(recipe->parameters,recipe->frames));
232 static int vircam_matchxy_destroy(cpl_plugin *plugin) {
237 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
238 recipe = (cpl_recipe *)plugin;
242 cpl_parameterlist_delete(recipe->parameters);
255 static int vircam_matchxy_test(cpl_parameterlist *parlist,
256 cpl_frameset *framelist) {
257 const char *fctid=
"vircam_matchxy";
259 int jst,jfn,status,j;
265 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
266 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
272 vircam_matchxy_init();
276 p = cpl_parameterlist_find(parlist,
"vircam.vircam_matchxy.extenum");
277 vircam_matchxy_config.extenum = cpl_parameter_get_int(p);
282 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
283 vircam_matchxy_tidy();
291 cpl_msg_error(fctid,
"Cannot labelise the input frames");
292 vircam_matchxy_tidy();
296 VIRCAM_CAL_OBJCAT)) == NULL) {
297 cpl_msg_error(fctid,
"No object catalogues found -- cannot continue");
298 vircam_matchxy_tidy();
301 ps.cat1 = cpl_frameset_get_frame(ps.catlist,0);
302 ps.cat2 = cpl_frameset_get_frame(ps.catlist,1);
303 if (ps.cat1 == NULL || ps.cat2 == NULL) {
304 cpl_msg_error(fctid,
"List does not contain two object catalogues");
305 vircam_matchxy_tidy();
314 (
const cpl_frame *)ps.cat1,&jst,&jfn);
315 if (jst == -1 || jfn == -1) {
316 cpl_msg_error(fctid,
"Unable to continue");
317 vircam_matchxy_tidy();
324 for (j = jst; j <= jfn; j++) {
330 if (ps.cat1f == NULL || ps.cat2f == NULL) {
331 cpl_msg_warning(fctid,
"No matching done");
337 cpl_msg_info(fctid,
"Doing the matching for extension %" CPL_SIZE_FORMAT,
341 &(vircam_matchxy_config.xoff),
342 &(vircam_matchxy_config.yoff),
343 &(vircam_matchxy_config.nm),&out,&status);
345 if (status != VIR_OK) {
346 cpl_msg_warning(fctid,
"No matching results done");
352 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
354 if (vircam_matchxy_save() != 0)
355 cpl_msg_warning(fctid,
"No matching results saved");
362 vircam_matchxy_tidy();
373 static int vircam_matchxy_save(
void) {
374 const char *fctid =
"vircam_matchxy_save";
375 const char *outfile =
"matchxy";
376 cpl_propertylist *p,*p2,*p3;
385 cpl_propertylist_update_string(p,
"DATE-OBS",
"ABC");
389 p2 = vircam_paf_req_items(p);
392 freepropertylist(p3);
396 cpl_propertylist_update_float(p2,
"ESO QC XOFF",vircam_matchxy_config.xoff);
397 cpl_propertylist_set_comment(p2,
"ESO QC XOFF",
398 "Calculated X offset (pixels)");
399 cpl_propertylist_update_float(p2,
"ESO QC YOFF",vircam_matchxy_config.yoff);
400 cpl_propertylist_set_comment(p2,
"ESO QC YOFF",
401 "Calculated Y offset (pixels)");
402 cpl_propertylist_update_int(p2,
"ESO QC NUMMATCH",
403 vircam_matchxy_config.nm);
404 cpl_propertylist_set_comment(p2,
"ESO QC NUMMATCH",
405 "Number of matching objects");
409 if (vircam_paf_print((
char *)outfile,
"VIRCAM/vircam_matchxy",
410 "Test output file",p2) != VIR_OK) {
411 cpl_msg_error(fctid,
"Unable to write PAF");
412 cpl_propertylist_delete(p2);
415 cpl_propertylist_delete(p2);
427 static void vircam_matchxy_init(
void) {
443 static void vircam_matchxy_tidy(
void) {
444 freespace(ps.labels);
447 freeframeset(ps.catlist);