39 #include "irplib_utils.h"
40 #include "irplib_stdstar.h"
42 #include "sofi_utils.h"
43 #include "sofi_pfits.h"
50 static int sofi_util_stdstars_create(cpl_plugin *) ;
51 static int sofi_util_stdstars_exec(cpl_plugin *) ;
52 static int sofi_util_stdstars_destroy(cpl_plugin *) ;
53 static int sofi_util_stdstars(cpl_frameset *) ;
54 static cpl_table * sofi_util_stdstars_convert(
const char *) ;
60 static char sofi_util_stdstars_description[] =
61 "sofi_util_stdstars -- SOFI standard stars catalog creation.\n"
62 "The files listed in the Set Of Frames (sof-file) must be tagged:\n"
63 "raw-file.fits "SOFI_UTIL_STDSTARS_RAW
"\n" ;
78 int cpl_plugin_get_info(cpl_pluginlist * list)
80 cpl_recipe * recipe = cpl_calloc(1,
sizeof(*recipe)) ;
81 cpl_plugin * plugin = &recipe->interface ;
83 cpl_plugin_init(plugin,
86 CPL_PLUGIN_TYPE_RECIPE,
88 "Standard stars catalog creation",
89 sofi_util_stdstars_description,
93 sofi_util_stdstars_create,
94 sofi_util_stdstars_exec,
95 sofi_util_stdstars_destroy) ;
97 cpl_pluginlist_append(list, plugin) ;
112 static int sofi_util_stdstars_create(cpl_plugin * plugin)
114 cpl_recipe * recipe ;
117 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
118 recipe = (cpl_recipe *)plugin ;
119 else return CPL_ERROR_UNSPECIFIED;
122 recipe->parameters = cpl_parameterlist_new() ;
135 static int sofi_util_stdstars_exec(cpl_plugin * plugin)
137 cpl_recipe * recipe ;
140 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
141 recipe = (cpl_recipe *)plugin ;
142 else return CPL_ERROR_UNSPECIFIED;
144 return sofi_util_stdstars(recipe->frames) ;
154 static int sofi_util_stdstars_destroy(cpl_plugin * plugin)
156 cpl_recipe * recipe ;
159 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
160 recipe = (cpl_recipe *)plugin ;
161 else return CPL_ERROR_UNSPECIFIED;
163 cpl_parameterlist_delete(recipe->parameters) ;
174 static int sofi_util_stdstars(
175 cpl_frameset * framelist)
177 cpl_frameset * rawframes ;
181 cpl_msg_error(cpl_func,
"Cannot identify RAW and CALIB frames") ;
182 return CPL_ERROR_UNSPECIFIED;
187 SOFI_UTIL_STDSTARS_RAW)) == NULL) {
188 cpl_msg_error(cpl_func,
"Cannot find raw frames in the input list") ;
189 return CPL_ERROR_UNSPECIFIED;
193 if (irplib_stdstar_write_catalogs(framelist,
195 "sofi_util_stdstars",
196 SOFI_UTIL_STDSTARS_RES,
198 PACKAGE
"/" PACKAGE_VERSION,
200 sofi_util_stdstars_convert)) {
201 cpl_msg_error(cpl_func,
"Cannot write the catalogs") ;
202 cpl_frameset_delete(rawframes) ;
203 return CPL_ERROR_UNSPECIFIED;
205 cpl_frameset_delete(rawframes) ;
231 static cpl_table * sofi_util_stdstars_convert(
const char * filename)
235 const char * filters[8];
246 if (filename == NULL) {
247 (void)cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
264 if ((in = fopen(filename,
"r")) == NULL) {
265 (void)cpl_error_set(cpl_func, CPL_ERROR_FILE_IO);
268 while (fgets(line, 1024, in) != NULL) {
269 if (line[0] !=
'#') nbentries ++ ;
274 out = cpl_table_new(nbentries);
275 cpl_table_new_column(out, IRPLIB_STDSTAR_STAR_COL, CPL_TYPE_STRING);
276 cpl_table_new_column(out, IRPLIB_STDSTAR_TYPE_COL, CPL_TYPE_STRING);
277 cpl_table_new_column(out, IRPLIB_STDSTAR_RA_COL, CPL_TYPE_DOUBLE);
278 cpl_table_new_column(out, IRPLIB_STDSTAR_DEC_COL, CPL_TYPE_DOUBLE);
279 for (i=0 ; i<nfilters ; i++)
280 cpl_table_new_column(out, filters[i], CPL_TYPE_DOUBLE);
284 while (fgets(line, 1024, in) != NULL) {
285 if (line[0] !=
'#') {
287 "%511s %lg %lg %511s %lg %lg %lg %lg %lg %lg %lg %lg",
288 sname, &ra, &dec, stype, &(mags[0]), &(mags[1]),
289 &(mags[2]), &(mags[3]), &(mags[4]), &(mags[5]),
290 &(mags[6]), &(mags[7])) != 12) {
292 cpl_table_delete(out) ;
293 (void)cpl_error_set(cpl_func, CPL_ERROR_BAD_FILE_FORMAT);
296 cpl_table_set_string(out, IRPLIB_STDSTAR_STAR_COL, nbentries,sname);
297 cpl_table_set_string(out, IRPLIB_STDSTAR_TYPE_COL, nbentries,stype);
298 cpl_table_set_double(out, IRPLIB_STDSTAR_RA_COL, nbentries, ra);
299 cpl_table_set_double(out, IRPLIB_STDSTAR_DEC_COL, nbentries, dec);
300 for (i=0 ; i<nfilters ; i++)
301 cpl_table_set_double(out, filters[i], nbentries, mags[i]);
307 if (cpl_table_get_nrow(out) == 0) {
308 cpl_table_delete(out);
309 (void)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
310 "Empty catalogue in '%s'", filename);