37 #include "vircam_utils.h"
38 #include "vircam_dfs.h"
39 #include "vircam_fits.h"
40 #include "vircam_mods.h"
44 static int vircam_getstds_create(cpl_plugin *) ;
45 static int vircam_getstds_exec(cpl_plugin *) ;
46 static int vircam_getstds_destroy(cpl_plugin *) ;
47 static int vircam_getstds_test(cpl_parameterlist *, cpl_frameset *) ;
48 static int vircam_getstds_save(cpl_frameset *framelist,
49 cpl_parameterlist *parlist);
50 static void vircam_getstds_init(
void);
51 static void vircam_getstds_tidy(
void);
59 } vircam_getstds_config;
65 cpl_propertylist *plist;
72 static cpl_frame *product_frame = NULL;
74 static char vircam_getstds_description[] =
75 "vircam_getstds -- VIRCAM test recipe to get standard stars for a frame\n\n"
76 "The program accepts the following files in the SOF:\n\n"
78 " -----------------------------------------------------------------------\n"
79 " %-21s A input image\n"
80 " %-21s Standard catalogue index file\n"
140 int cpl_plugin_get_info(cpl_pluginlist *list) {
141 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
142 cpl_plugin *plugin = &recipe->interface;
143 char alldesc[SZ_ALLDESC];
144 (void)snprintf(alldesc,SZ_ALLDESC,vircam_getstds_description,
145 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_2MASS);
147 cpl_plugin_init(plugin,
149 VIRCAM_BINARY_VERSION,
150 CPL_PLUGIN_TYPE_RECIPE,
152 "VIRCAM standard star extraction test recipe [test]",
157 vircam_getstds_create,
159 vircam_getstds_destroy);
161 cpl_pluginlist_append(list,plugin);
177 static int vircam_getstds_create(cpl_plugin *plugin) {
183 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
184 recipe = (cpl_recipe *)plugin;
190 recipe->parameters = cpl_parameterlist_new();
194 p = cpl_parameter_new_range(
"vircam.vircam_getstds.extenum",
196 "Extension number to be done, 0 == all",
197 "vircam.vircam_getstds",1,0,16);
198 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
199 cpl_parameterlist_append(recipe->parameters,p);
214 static int vircam_getstds_exec(cpl_plugin *plugin) {
219 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
220 recipe = (cpl_recipe *)plugin;
224 return(vircam_getstds_test(recipe->parameters,recipe->frames));
236 static int vircam_getstds_destroy(cpl_plugin *plugin) {
241 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
242 recipe = (cpl_recipe *)plugin;
246 cpl_parameterlist_delete(recipe->parameters);
260 static int vircam_getstds_test(cpl_parameterlist *parlist,
261 cpl_frameset *framelist) {
262 const char *fctid=
"vircam_getstds";
264 int jst,jfn,status,j;
270 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
271 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
277 vircam_getstds_init();
281 p = cpl_parameterlist_find(parlist,
"vircam.vircam_getstds.extenum");
282 vircam_getstds_config.extenum = cpl_parameter_get_int(p);
287 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
288 vircam_getstds_tidy();
296 cpl_msg_error(fctid,
"Cannot labelise the input frames");
297 vircam_getstds_tidy();
301 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
302 cpl_msg_info(fctid,
"No raw image found -- cannot continue");
303 vircam_getstds_tidy();
307 VIRCAM_CAL_2MASS)) == NULL) {
308 cpl_msg_info(fctid,
"No 2MASS index found -- cannot continue");
309 vircam_getstds_tidy();
316 cpl_frame_delete(catindex);
324 if (jst == -1 || jfn == -1) {
325 cpl_msg_error(fctid,
"Unable to continue");
326 vircam_getstds_tidy();
333 for (j = jst; j <= jfn; j++) {
334 isfirst = (j == jst);
339 if (ps.img == NULL) {
340 vircam_getstds_tidy();
346 cpl_msg_info(fctid,
"Extracting the standards");
348 ps.catname,&(ps.stds),&status);
349 if (status != VIR_OK) {
350 vircam_getstds_tidy();
356 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
358 if (vircam_getstds_save(framelist,parlist) != 0) {
359 vircam_getstds_tidy();
368 vircam_getstds_tidy();
382 static int vircam_getstds_save(cpl_frameset *framelist,
383 cpl_parameterlist *parlist) {
384 const char *fctid =
"vircam_getstds_save";
385 const char *outfile =
"getstds.fits";
386 const char *recipeid =
"vircam_getstds";
387 cpl_propertylist *plist,*elist;
396 product_frame = cpl_frame_new();
397 cpl_frame_set_filename(product_frame,outfile);
398 cpl_frame_set_tag(product_frame,VIRCAM_PRO_STDTAB);
399 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_TABLE);
400 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
401 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
407 parlist,(
char *)recipeid,
408 "?Dictionary?",NULL,0);
414 parlist,(
char *)recipeid,
415 "?Dictionary?",NULL);
419 if (cpl_table_save(ps.stds,plist,elist,outfile,CPL_IO_DEFAULT)
421 cpl_msg_error(fctid,
"Cannot save product");
422 cpl_frame_delete(product_frame);
425 cpl_frameset_insert(framelist,product_frame);
435 parlist,(
char *)recipeid,
436 "?Dictionary?",NULL);
438 if (cpl_table_save(ps.stds,NULL,elist,outfile,CPL_IO_EXTEND)
440 cpl_msg_error(fctid,
"Cannot save product table extension");
455 static void vircam_getstds_init(
void) {
472 static void vircam_getstds_tidy(
void) {
475 freespace(ps.labels);
476 freepropertylist(ps.plist);
478 freespace(ps.catname);
479 freespace(ps.catpath);