37#include <casu_utils.h>
40#include "vircam_utils.h"
41#include "vircam_dfs.h"
42#include "vircam_mods.h"
46static int vircam_getstds_create(cpl_plugin *) ;
47static int vircam_getstds_exec(cpl_plugin *) ;
48static int vircam_getstds_destroy(cpl_plugin *) ;
49static int vircam_getstds_test(cpl_parameterlist *, cpl_frameset *) ;
50static int vircam_getstds_save(cpl_frameset *framelist,
51 cpl_parameterlist *parlist);
52static void vircam_getstds_init(
void);
53static void vircam_getstds_tidy(
void);
61} vircam_getstds_config;
67 cpl_propertylist *plist;
74static cpl_frame *product_frame = NULL;
76static char vircam_getstds_description[] =
77"vircam_getstds -- VIRCAM test recipe to get standard stars for a frame\n\n"
78"The program accepts the following files in the SOF:\n\n"
80" -----------------------------------------------------------------------\n"
81" %-21s A input image\n"
82" %-21s Standard catalogue index file\n"
142int cpl_plugin_get_info(cpl_pluginlist *list) {
143 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
144 cpl_plugin *plugin = &recipe->interface;
145 char alldesc[SZ_ALLDESC];
146 (void)snprintf(alldesc,SZ_ALLDESC,vircam_getstds_description,
147 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_2MASS);
149 cpl_plugin_init(plugin,
151 VIRCAM_BINARY_VERSION,
152 CPL_PLUGIN_TYPE_RECIPE,
154 "VIRCAM standard star extraction test recipe [test]",
159 vircam_getstds_create,
161 vircam_getstds_destroy);
163 cpl_pluginlist_append(list,plugin);
179static int vircam_getstds_create(cpl_plugin *plugin) {
185 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
186 recipe = (cpl_recipe *)plugin;
192 recipe->parameters = cpl_parameterlist_new();
196 p = cpl_parameter_new_range(
"vircam.vircam_getstds.extenum",
198 "Extension number to be done, 0 == all",
199 "vircam.vircam_getstds",1,0,16);
200 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
201 cpl_parameterlist_append(recipe->parameters,p);
216static int vircam_getstds_exec(cpl_plugin *plugin) {
221 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
222 recipe = (cpl_recipe *)plugin;
226 return(vircam_getstds_test(recipe->parameters,recipe->frames));
238static int vircam_getstds_destroy(cpl_plugin *plugin) {
243 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
244 recipe = (cpl_recipe *)plugin;
248 cpl_parameterlist_delete(recipe->parameters);
262static int vircam_getstds_test(cpl_parameterlist *parlist,
263 cpl_frameset *framelist) {
264 const char *fctid=
"vircam_getstds";
266 int jst,jfn,status,j;
272 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
273 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
279 vircam_getstds_init();
283 p = cpl_parameterlist_find(parlist,
"vircam.vircam_getstds.extenum");
284 vircam_getstds_config.extenum = cpl_parameter_get_int(p);
289 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
290 vircam_getstds_tidy();
298 cpl_msg_error(fctid,
"Cannot labelise the input frames");
299 vircam_getstds_tidy();
303 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
304 cpl_msg_info(fctid,
"No raw image found -- cannot continue");
305 vircam_getstds_tidy();
309 VIRCAM_CAL_2MASS)) == NULL) {
310 cpl_msg_info(fctid,
"No 2MASS index found -- cannot continue");
311 vircam_getstds_tidy();
318 cpl_frame_delete(catindex);
326 if (jst == -1 || jfn == -1) {
327 cpl_msg_error(fctid,
"Unable to continue");
328 vircam_getstds_tidy();
335 for (j = jst; j <= jfn; j++) {
336 isfirst = (j == jst);
341 if (ps.img == NULL) {
342 vircam_getstds_tidy();
348 cpl_msg_info(fctid,
"Extracting the standards");
350 ps.catname,0,
".",&(ps.stds),&status);
351 if (status != CASU_OK) {
352 vircam_getstds_tidy();
358 cpl_msg_info(fctid,
"Saving results for extension %" CPL_SIZE_FORMAT,
360 if (vircam_getstds_save(framelist,parlist) != 0) {
361 vircam_getstds_tidy();
370 vircam_getstds_tidy();
384static int vircam_getstds_save(cpl_frameset *framelist,
385 cpl_parameterlist *parlist) {
386 const char *fctid =
"vircam_getstds_save";
387 const char *outfile =
"getstds.fits";
388 const char *recipeid =
"vircam_getstds";
389 cpl_propertylist *plist,*elist;
398 product_frame = cpl_frame_new();
399 cpl_frame_set_filename(product_frame,outfile);
400 cpl_frame_set_tag(product_frame,VIRCAM_PRO_STDTAB);
401 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_TABLE);
402 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
403 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
409 parlist,(
char *)recipeid,
410 "?Dictionary?",NULL,0);
416 parlist,(
char *)recipeid,
417 "?Dictionary?",NULL);
421 if (cpl_table_save(ps.stds,plist,elist,outfile,CPL_IO_DEFAULT)
423 cpl_msg_error(fctid,
"Cannot save product");
424 cpl_frame_delete(product_frame);
427 cpl_frameset_insert(framelist,product_frame);
437 parlist,(
char *)recipeid,
438 "?Dictionary?",NULL);
440 if (cpl_table_save(ps.stds,NULL,elist,outfile,CPL_IO_EXTEND)
442 cpl_msg_error(fctid,
"Cannot save product table extension");
457static void vircam_getstds_init(
void) {
474static void vircam_getstds_tidy(
void) {
477 freespace(ps.labels);
478 freepropertylist(ps.plist);
480 freespace(ps.catname);
481 freespace(ps.catpath);
cpl_propertylist * casu_fits_get_phu(casu_fits *p)
cpl_propertylist * casu_fits_get_ehu(casu_fits *p)
casu_fits * casu_fits_load(cpl_frame *frame, cpl_type type, int nexten)
int casu_getstds(cpl_propertylist *plist, int cache, char *path, char *catname, int cdssearch, char *cacheloc, cpl_table **stds, int *status)
Get a table of standard stars that appear on an image from a catalogue.
int casu_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
Compare input tags.
int casu_catpars(cpl_frame *indx, char **catpath, char **catname)
Find the name of the standard catalogue and its location.
cpl_frame * casu_frameset_subgroup_1(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
Extract a frame of a given label from a frameset.
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)