isaac_util_stdstars.c

00001 /* $Id: isaac_util_stdstars.c,v 1.8 2009/04/28 14:30:03 llundin Exp $
00002  *
00003  * This file is part of the ISAAC Pipeline
00004  * Copyright (C) 2002,2003 European Southern Observatory
00005  *
00006  * This program is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2 of the License, or
00009  * (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  */
00020 
00021 /*
00022  * $Author: llundin $
00023  * $Date: 2009/04/28 14:30:03 $
00024  * $Revision: 1.8 $
00025  * $Name: isaac-6_1_0 $
00026  */
00027 
00028 #ifdef HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031 
00032 /*-----------------------------------------------------------------------------
00033                                 Includes
00034  -----------------------------------------------------------------------------*/
00035 
00036 #include <math.h>
00037 #include <cpl.h>
00038 
00039 #include "irplib_utils.h"
00040 #include "irplib_stdstar.h"
00041 
00042 #include "isaac_utils.h"
00043 #include "isaac_pfits.h"
00044 #include "isaac_dfs.h"
00045 
00046 /*-----------------------------------------------------------------------------
00047                             Functions prototypes
00048  -----------------------------------------------------------------------------*/
00049 
00050 static int isaac_util_stdstars_create(cpl_plugin *);
00051 static int isaac_util_stdstars_exec(cpl_plugin *);
00052 static int isaac_util_stdstars_destroy(cpl_plugin *);
00053 static int isaac_util_stdstars(cpl_frameset *);
00054 static cpl_table * isaac_util_stdstars_convert(const char *); 
00055 
00056 /*-----------------------------------------------------------------------------
00057                             Static variables
00058  -----------------------------------------------------------------------------*/
00059 
00060 static char isaac_util_stdstars_description[] = 
00061 "isaac_util_stdstars -- ISAAC standard stars catalog creation.\n"
00062 "The files listed in the Set Of Frames (sof-file) must be tagged:\n"
00063 "raw-file.fits "ISAAC_UTIL_STDSTARS_RAW"\n";
00064 
00065 /*-----------------------------------------------------------------------------
00066                                 Functions code
00067  -----------------------------------------------------------------------------*/
00068 
00069 /*----------------------------------------------------------------------------*/
00077 /*----------------------------------------------------------------------------*/
00078 int cpl_plugin_get_info(cpl_pluginlist * list)
00079 {
00080     cpl_recipe  *   recipe = cpl_calloc(1, sizeof(*recipe));
00081     cpl_plugin  *   plugin = &recipe->interface;
00082 
00083     cpl_plugin_init(plugin,
00084                     CPL_PLUGIN_API,
00085                     ISAAC_BINARY_VERSION,
00086                     CPL_PLUGIN_TYPE_RECIPE,
00087                     "isaac_util_stdstars",
00088                     "Standard stars catalog creation",
00089                     isaac_util_stdstars_description,
00090                     "Lars Lundin",
00091                     PACKAGE_BUGREPORT,
00092                     isaac_get_license(),
00093                     isaac_util_stdstars_create,
00094                     isaac_util_stdstars_exec,
00095                     isaac_util_stdstars_destroy);
00096 
00097     cpl_pluginlist_append(list, plugin);
00098     
00099     return 0;
00100 }
00101 
00102 /*----------------------------------------------------------------------------*/
00111 /*----------------------------------------------------------------------------*/
00112 static int isaac_util_stdstars_create(cpl_plugin * plugin)
00113 {
00114     cpl_recipe      * recipe;
00115 
00116     /* Get the recipe out of the plugin */
00117     if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00118         recipe = (cpl_recipe *)plugin;
00119     else return -1;
00120 
00121     /* Create the parameters list in the cpl_recipe object */
00122     recipe->parameters = cpl_parameterlist_new();
00123 
00124     /* Return */
00125     return 0;
00126 }
00127 
00128 /*----------------------------------------------------------------------------*/
00134 /*----------------------------------------------------------------------------*/
00135 static int isaac_util_stdstars_exec(cpl_plugin * plugin)
00136 {
00137     cpl_recipe  *   recipe;
00138 
00139     /* Get the recipe out of the plugin */
00140     if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00141         recipe = (cpl_recipe *)plugin;
00142     else return -1;
00143 
00144     return isaac_util_stdstars(recipe->frames);
00145 }
00146 
00147 /*----------------------------------------------------------------------------*/
00153 /*----------------------------------------------------------------------------*/
00154 static int isaac_util_stdstars_destroy(cpl_plugin * plugin)
00155 {
00156     cpl_recipe  *   recipe;
00157 
00158     /* Get the recipe out of the plugin */
00159     if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00160         recipe = (cpl_recipe *)plugin;
00161     else return -1;
00162 
00163     cpl_parameterlist_delete(recipe->parameters);
00164     return 0;
00165 }
00166 
00167 /*----------------------------------------------------------------------------*/
00173 /*----------------------------------------------------------------------------*/
00174 static int isaac_util_stdstars(
00175         cpl_frameset        *   framelist)
00176 {
00177     cpl_frameset    *   rawframes;
00178     
00179     /* Identify the RAW and CALIB frames in the input frameset */
00180     if (isaac_dfs_set_groups(framelist)) {
00181         cpl_msg_error(cpl_func, "Cannot identify RAW and CALIB frames");
00182         return -1;
00183     }
00184 
00185     /* Retrieve raw frames */
00186     if ((rawframes = isaac_extract_frameset(framelist,
00187                     ISAAC_UTIL_STDSTARS_RAW)) == NULL) {
00188         cpl_msg_error(cpl_func, "Cannot find raw frames in the input list");
00189         return -1;
00190     }
00191 
00192     /* Write the catalog */
00193     if (irplib_stdstar_write_catalogs(framelist,
00194                 rawframes, 
00195                 "isaac_util_stdstars",
00196                 ISAAC_UTIL_STDSTARS_RES, 
00197                 NULL,
00198                 PACKAGE "/" PACKAGE_VERSION,
00199                 "ISAAC",
00200                 isaac_util_stdstars_convert) == -1) {
00201         cpl_msg_error(cpl_func, "Cannot write the catalogs");
00202         cpl_frameset_delete(rawframes);
00203         return -1;
00204     }
00205     cpl_frameset_delete(rawframes);
00206     return 0;
00207 }
00208 
00209 /*----------------------------------------------------------------------------*/
00230 /*----------------------------------------------------------------------------*/
00231 static cpl_table * isaac_util_stdstars_convert(const char * filename) 
00232 {
00233     cpl_table   *   out;
00234     int             nfilters;
00235     const char  *   filters[8];
00236     double          mags[8];
00237     int             nbentries;
00238     FILE        *   in;
00239     char            line[1024];
00240     double          ra, dec;
00241     char            sname[512];
00242     char            stype[512];
00243     int             i;
00244     
00245     /* Check entries */
00246     if (filename == NULL) return NULL;
00247 
00248     /* Initialise */
00249     nfilters = 8;
00250     filters[0] = "J";
00251     filters[1] = "H";
00252     filters[2] = "K";
00253     filters[3] = "Ks";
00254     filters[4] = "L";
00255     filters[5] = "M";
00256     filters[6] = "Lp";
00257     filters[7] = "Mp";
00258    
00259     /* Get the number of lines */
00260     nbentries = 0;
00261     if ((in = fopen(filename, "r")) == NULL) {
00262         return NULL;
00263     }
00264     while (fgets(line, 1024, in) != NULL) {
00265         if (line[0] != '#') nbentries ++;
00266     }
00267     fclose(in);
00268     
00269    /* Create the table */
00270     out = cpl_table_new(nbentries);
00271     cpl_table_new_column(out, IRPLIB_STDSTAR_STAR_COL, CPL_TYPE_STRING);
00272     cpl_table_new_column(out, IRPLIB_STDSTAR_TYPE_COL, CPL_TYPE_STRING);
00273     cpl_table_new_column(out, IRPLIB_STDSTAR_RA_COL, CPL_TYPE_DOUBLE);
00274     cpl_table_new_column(out, IRPLIB_STDSTAR_DEC_COL, CPL_TYPE_DOUBLE);
00275     for (i=0; i<nfilters; i++)
00276         cpl_table_new_column(out, filters[i], CPL_TYPE_DOUBLE);
00277 
00278     /* Parse the file */
00279     if ((in = fopen(filename, "r")) == NULL) {
00280         cpl_table_delete(out);
00281         return NULL;
00282     }
00283     nbentries = 0;
00284     while (fgets(line, 1024, in) != NULL) {
00285         if (line[0] != '#') {
00286             if (sscanf(line, "%s %lg %lg %s %lg %lg %lg %lg %lg %lg %lg %lg", 
00287                         sname, &ra, &dec, stype, &(mags[0]), &(mags[1]), 
00288                         &(mags[2]), &(mags[3]), &(mags[4]), &(mags[5]), 
00289                         &(mags[6]), &(mags[7])) != 12) {
00290                 cpl_table_delete(out);
00291                 return NULL;
00292             }
00293             cpl_table_set_string(out, IRPLIB_STDSTAR_STAR_COL,nbentries, sname);
00294             cpl_table_set_string(out, IRPLIB_STDSTAR_TYPE_COL,nbentries, stype);
00295             cpl_table_set_double(out, IRPLIB_STDSTAR_RA_COL, nbentries, ra);
00296             cpl_table_set_double(out, IRPLIB_STDSTAR_DEC_COL, nbentries, dec);
00297             for (i=0; i<nfilters; i++)
00298                 cpl_table_set_double(out, filters[i], nbentries, mags[i]);
00299             nbentries ++;
00300         }
00301     }
00302     fclose(in);
00303                 
00304     return out;
00305 }
00306 

Generated on Mon Feb 6 14:44:02 2012 for ISAAC Pipeline Reference Manual by  doxygen 1.5.8