37 #include "vircam_utils.h"
38 #include "vircam_dfs.h"
39 #include "vircam_fits.h"
40 #include "vircam_mods.h"
44 static int vircam_matchstds_create(cpl_plugin *);
45 static int vircam_matchstds_exec(cpl_plugin *);
46 static int vircam_matchstds_destroy(cpl_plugin *);
47 static int vircam_matchstds_test(cpl_parameterlist *, cpl_frameset *);
48 static int vircam_matchstds_save(cpl_frameset *framelist,
49 cpl_parameterlist *parlist);
50 static void vircam_matchstds_init(
void);
51 static void vircam_matchstds_tidy(
void);
59 } vircam_matchstds_config;
72 static cpl_frame *product_frame = NULL;
74 static char vircam_matchstds_description[] =
75 "vircam_matchstds -- VIRCAM recipe to test vircam_matchstds.\n\n"
76 "Match a catalogue with a table of standards\n\n"
77 "The program accepts the following files in the SOF:\n\n"
79 " -----------------------------------------------------------------------\n"
80 " %-21s An input catalogue of objects extracted from an image\n"
81 " %-21s An input catalogue of standard stars\n"
138 int cpl_plugin_get_info(cpl_pluginlist *list) {
139 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
140 cpl_plugin *plugin = &recipe->interface;
141 char alldesc[SZ_ALLDESC];
142 (void)snprintf(alldesc,SZ_ALLDESC,vircam_matchstds_description,
143 VIRCAM_CAL_OBJCAT,VIRCAM_CAL_STDTAB);
145 cpl_plugin_init(plugin,
147 VIRCAM_BINARY_VERSION,
148 CPL_PLUGIN_TYPE_RECIPE,
150 "VIRCAM catalogue and standards matching test recipe [test]",
155 vircam_matchstds_create,
156 vircam_matchstds_exec,
157 vircam_matchstds_destroy);
159 cpl_pluginlist_append(list,plugin);
175 static int vircam_matchstds_create(cpl_plugin *plugin) {
181 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
182 recipe = (cpl_recipe *)plugin;
188 recipe->parameters = cpl_parameterlist_new();
192 p = cpl_parameter_new_range(
"vircam.vircam_matchstds.extenum",
194 "Extension number to be done, 0 == all",
195 "vircam.vircam_matchstds",1,0,16);
196 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
197 cpl_parameterlist_append(recipe->parameters,p);
212 static int vircam_matchstds_exec(cpl_plugin *plugin) {
217 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
218 recipe = (cpl_recipe *)plugin;
222 return(vircam_matchstds_test(recipe->parameters,recipe->frames));
233 static int vircam_matchstds_destroy(cpl_plugin *plugin) {
238 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
239 recipe = (cpl_recipe *)plugin;
243 cpl_parameterlist_delete(recipe->parameters);
256 static int vircam_matchstds_test(cpl_parameterlist *parlist,
257 cpl_frameset *framelist) {
258 const char *fctid=
"vircam_matchstds";
260 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_matchstds_init();
276 p = cpl_parameterlist_find(parlist,
"vircam.vircam_matchstds.extenum");
277 vircam_matchstds_config.extenum = cpl_parameter_get_int(p);
282 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
283 vircam_matchstds_tidy();
291 cpl_msg_error(fctid,
"Cannot labelise the input frames");
292 vircam_matchstds_tidy();
296 VIRCAM_CAL_OBJCAT)) == NULL) {
297 cpl_msg_info(fctid,
"No object catalogue found -- cannot continue");
298 vircam_matchstds_tidy();
302 VIRCAM_CAL_STDTAB)) == NULL) {
303 cpl_msg_info(fctid,
"No standards catalogue found -- cannot continue");
304 vircam_matchstds_tidy();
313 (
const cpl_frame *)ps.cat,&jst,&jfn);
314 if (jst == -1 || jfn == -1) {
315 cpl_msg_error(fctid,
"Unable to continue");
316 vircam_matchstds_tidy();
323 for (j = jst; j <= jfn; j++) {
324 isfirst = (j == jst);
330 if (ps.stdsf == NULL || ps.catf == NULL) {
333 cpl_msg_info(fctid,
"No matching possible");
339 cpl_msg_info(fctid,
"Doing the matching for extension %" CPL_SIZE_FORMAT,
343 &(ps.outtab),&status);
344 if (status != VIR_OK) {
345 cpl_msg_info(fctid,
"No matching done");
351 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
353 if (vircam_matchstds_save(framelist,parlist) != 0)
354 cpl_msg_info(fctid,
"No matching saved");
361 freetable(ps.outtab);
363 vircam_matchstds_tidy();
376 static int vircam_matchstds_save(cpl_frameset *framelist,
377 cpl_parameterlist *parlist) {
378 const char *recipeid =
"vircam_matchstds";
379 const char *fctid =
"vircam_matchstds_save";
380 const char *outfile =
"matchstds.fits";
381 cpl_propertylist *plist,*elist;
389 product_frame = cpl_frame_new();
390 cpl_frame_set_filename(product_frame,outfile);
391 cpl_frame_set_tag(product_frame,VIRCAM_PRO_MSTDTAB);
392 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_TABLE);
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);
407 parlist,(
char *)recipeid,
408 "?Dictionary?",NULL);
412 if (cpl_table_save(ps.outtab,plist,elist,outfile,CPL_IO_DEFAULT)
414 cpl_msg_error(fctid,
"Cannot save product table");
415 cpl_frame_delete(product_frame);
418 cpl_frameset_insert(framelist,product_frame);
428 parlist,(
char *)recipeid,
429 "?Dictionary?",NULL);
433 if (cpl_table_save(ps.outtab,NULL,elist,outfile,CPL_IO_EXTEND)
435 cpl_msg_error(fctid,
"Cannot save product table");
450 static void vircam_matchstds_init(
void) {
466 static void vircam_matchstds_tidy(
void) {
467 freespace(ps.labels);
472 freetable(ps.outtab);
const char * vircam_get_license(void)
cpl_table * vircam_tfits_get_table(vir_tfits *p)
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_propertylist * vircam_tfits_get_ehu(vir_tfits *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)
vir_tfits * vircam_tfits_load(cpl_frame *table, int nexten)
cpl_propertylist * vircam_tfits_get_phu(vir_tfits *p)
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)
int vircam_matchstds(cpl_table *objtab, cpl_table *stdstab, float srad, cpl_table **outtab, int *status)
Match object and standard star tables by their xy coordinates.
int vircam_dfs_set_groups(cpl_frameset *set)