|
HAWKI Pipeline Reference Manual 1.8.2
|
00001 /* $Id: hawki_tec_filtchk.c,v 1.14 2010/09/28 14:11:10 cgarcia Exp $ 00002 * 00003 * This file is part of the HAWKI 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: cgarcia $ 00023 * $Date: 2010/09/28 14:11:10 $ 00024 * $Revision: 1.14 $ 00025 * $Name: hawki-1_8_2 $ 00026 */ 00027 00028 #ifdef HAVE_CONFIG_H 00029 #include <config.h> 00030 #endif 00031 00032 /*----------------------------------------------------------------------------- 00033 Includes 00034 -----------------------------------------------------------------------------*/ 00035 00036 #include <string.h> 00037 #include <math.h> 00038 #include <cpl.h> 00039 00040 #include <hawki_dfs.h> 00041 #include <hawki_load.h> 00042 #include <hawki_save.h> 00043 #include <hawki_pfits.h> 00044 #include <hawki_image_stats.h> 00045 #include <hawki_utils.h> 00046 00047 00048 /*----------------------------------------------------------------------------- 00049 Functions prototypes 00050 -----------------------------------------------------------------------------*/ 00051 00052 static int hawki_tec_filtchk_create(cpl_plugin *) ; 00053 static int hawki_tec_filtchk_exec(cpl_plugin *) ; 00054 static int hawki_tec_filtchk_destroy(cpl_plugin *) ; 00055 static int hawki_tec_filtchk(cpl_parameterlist *, cpl_frameset *) ; 00056 00057 static int hawki_tec_filtchk_frameset_stats 00058 (cpl_table ** target_stats, 00059 cpl_propertylist ** stats_stats, 00060 cpl_frameset * target_frames); 00061 00062 static int hawki_tec_filtchk_save 00063 (cpl_table ** target_stats, 00064 cpl_parameterlist * recipe_parlist, 00065 cpl_frameset * recipe_frameset, 00066 cpl_propertylist ** stats_stats, 00067 const char * calpro, 00068 const char * protype); 00069 00070 /*----------------------------------------------------------------------------- 00071 Static variables 00072 -----------------------------------------------------------------------------*/ 00073 00074 static char hawki_tec_filtchk_description[] = 00075 "hawki_tec_filtchk -- Check pairs of flats taken with different filters.\n" 00076 "The files listed in the Set Of Frames (sof-file) must be tagged:\n" 00077 "raw-file.fits "HAWKI_TEC_FLAT_RAW"\n"; 00078 00079 /*----------------------------------------------------------------------------- 00080 Functions code 00081 -----------------------------------------------------------------------------*/ 00082 00083 /*----------------------------------------------------------------------------*/ 00091 /*----------------------------------------------------------------------------*/ 00092 int cpl_plugin_get_info(cpl_pluginlist * list) 00093 { 00094 cpl_recipe * recipe = cpl_calloc(1, sizeof(*recipe)) ; 00095 cpl_plugin * plugin = &recipe->interface ; 00096 00097 cpl_plugin_init(plugin, 00098 CPL_PLUGIN_API, 00099 HAWKI_BINARY_VERSION, 00100 CPL_PLUGIN_TYPE_RECIPE, 00101 "hawki_tec_filtchk", 00102 "Filter checking recipe", 00103 hawki_tec_filtchk_description, 00104 "Cesar Enrique Garcia Dabo", 00105 PACKAGE_BUGREPORT, 00106 hawki_get_license(), 00107 hawki_tec_filtchk_create, 00108 hawki_tec_filtchk_exec, 00109 hawki_tec_filtchk_destroy) ; 00110 00111 cpl_pluginlist_append(list, plugin) ; 00112 00113 return 0; 00114 } 00115 00116 /*----------------------------------------------------------------------------*/ 00125 /*----------------------------------------------------------------------------*/ 00126 static int hawki_tec_filtchk_create(cpl_plugin * plugin) 00127 { 00128 cpl_recipe * recipe ; 00129 /* cpl_parameter * p ; */ 00130 00131 /* Get the recipe out of the plugin */ 00132 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 00133 recipe = (cpl_recipe *)plugin ; 00134 else return -1 ; 00135 00136 /* Create the parameters list in the cpl_recipe object */ 00137 recipe->parameters = cpl_parameterlist_new() ; 00138 00139 /* Fill the parameters list */ 00140 /* None.. */ 00141 00142 /* Return */ 00143 return 0; 00144 } 00145 00146 /*----------------------------------------------------------------------------*/ 00152 /*----------------------------------------------------------------------------*/ 00153 static int hawki_tec_filtchk_exec(cpl_plugin * plugin) 00154 { 00155 cpl_recipe * recipe ; 00156 00157 /* Get the recipe out of the plugin */ 00158 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 00159 recipe = (cpl_recipe *)plugin ; 00160 else return -1 ; 00161 00162 /* Issue a banner */ 00163 hawki_print_banner(); 00164 00165 return hawki_tec_filtchk(recipe->parameters, recipe->frames) ; 00166 } 00167 00168 /*----------------------------------------------------------------------------*/ 00174 /*----------------------------------------------------------------------------*/ 00175 static int hawki_tec_filtchk_destroy(cpl_plugin * plugin) 00176 { 00177 cpl_recipe * recipe ; 00178 00179 /* Get the recipe out of the plugin */ 00180 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 00181 recipe = (cpl_recipe *)plugin ; 00182 else return -1 ; 00183 00184 cpl_parameterlist_delete(recipe->parameters) ; 00185 return 0 ; 00186 } 00187 00188 /*----------------------------------------------------------------------------*/ 00195 /*----------------------------------------------------------------------------*/ 00196 static int hawki_tec_filtchk( 00197 cpl_parameterlist * parlist, 00198 cpl_frameset * framelist) 00199 { 00200 cpl_frameset * frames ; 00201 cpl_table ** target_stats; 00202 cpl_propertylist ** stats_stats; 00203 int idet; 00204 char calpro[1024]; 00205 char protype[1024]; 00206 00207 /* Identify the RAW and CALIB frames in the input frameset */ 00208 if (hawki_dfs_set_groups(framelist)) 00209 { 00210 cpl_msg_error(__func__, "Cannot identify RAW and CALIB frames") ; 00211 return -1; 00212 } 00213 00214 /* Retrieve raw frames */ 00215 cpl_msg_info(__func__, "Identifying input frames"); 00216 frames = hawki_extract_frameset(framelist, HAWKI_TEC_FLAT_RAW) ; 00217 snprintf(calpro, 1024, HAWKI_CALPRO_FILTERPOSCHECK_STATS); 00218 snprintf(protype, 1024, HAWKI_PROTYPE_FILTERPOSCHECK_STATS); 00219 if (frames == NULL) 00220 { 00221 cpl_msg_error(__func__,"Input files should be tagged %s", 00222 HAWKI_TEC_FLAT_RAW); 00223 return -1; 00224 } 00225 00226 /* Create the statistics table */ 00227 target_stats = cpl_malloc(HAWKI_NB_DETECTORS * sizeof(cpl_table *)); 00228 stats_stats = cpl_malloc(HAWKI_NB_DETECTORS * sizeof(cpl_propertylist *)); 00229 for( idet=0 ; idet<HAWKI_NB_DETECTORS ; idet++) 00230 { 00231 target_stats[idet] = cpl_table_new(cpl_frameset_get_size(frames)); 00232 stats_stats[idet] = cpl_propertylist_new(); 00233 } 00234 hawki_image_stats_initialize(target_stats); 00235 00236 /* Compute actually the statistics */ 00237 hawki_tec_filtchk_frameset_stats(target_stats, stats_stats, frames); 00238 00239 /* Saving the table product */ 00240 hawki_tec_filtchk_save 00241 (target_stats, parlist, framelist, stats_stats, calpro, protype); 00242 00243 /* Free and return */ 00244 cpl_frameset_delete(frames); 00245 for( idet=0 ; idet<HAWKI_NB_DETECTORS ; idet++) 00246 { 00247 cpl_table_delete(target_stats[idet]); 00248 cpl_propertylist_delete(stats_stats[idet]); 00249 } 00250 cpl_free(target_stats); 00251 cpl_free(stats_stats); 00252 00253 /* Return */ 00254 if (cpl_error_get_code()) 00255 { 00256 cpl_msg_error(__func__, 00257 "HAWK-I pipeline could not recover from previous errors"); 00258 return -1 ; 00259 } 00260 else return 0 ; 00261 } 00262 00263 /*----------------------------------------------------------------------------*/ 00273 /*----------------------------------------------------------------------------*/ 00274 static int hawki_tec_filtchk_frameset_stats 00275 (cpl_table ** target_stats, 00276 cpl_propertylist ** stats_stats, 00277 cpl_frameset * target_frames) 00278 { 00279 int iframe; 00280 int nframes; 00281 00282 /* Loop on the number of frames */ 00283 nframes = cpl_frameset_get_size(target_frames); 00284 cpl_msg_info(__func__, "Looping the target frames: %d frames", nframes); 00285 cpl_msg_indent_more(); 00286 for( iframe = 0 ; iframe < nframes ; ++iframe) 00287 { 00288 /* Local storage variables */ 00289 cpl_frame * this_target_frame; 00290 00291 /* Computing statistics for this frame */ 00292 cpl_msg_info(__func__, "Computing stats for frame: %d", iframe +1); 00293 this_target_frame = cpl_frameset_get_frame(target_frames, iframe); 00294 hawki_image_stats_fill_from_frame 00295 (target_stats, this_target_frame, iframe); 00296 } 00297 cpl_msg_indent_less(); 00298 00299 /* Compute stats of the stats */ 00300 hawki_image_stats_stats(target_stats, stats_stats); 00301 00302 /* Print info about the statistics */ 00303 hawki_image_stats_print(target_stats); 00304 00305 return 0; 00306 } 00307 00308 /*----------------------------------------------------------------------------*/ 00318 /*----------------------------------------------------------------------------*/ 00319 static int hawki_tec_filtchk_save 00320 (cpl_table ** target_stats, 00321 cpl_parameterlist * recipe_parlist, 00322 cpl_frameset * recipe_frameset, 00323 cpl_propertylist ** stats_stats, 00324 const char * calpro, 00325 const char * protype) 00326 { 00327 const cpl_frame * reference_frame; 00328 cpl_propertylist * referencelist; 00329 cpl_propertylist ** extlists; 00330 int idet; 00331 int ext_nb; 00332 const char * recipe_name = "hawki_tec_filtchk"; 00333 00334 /* Get the reference frame (the first one) */ 00335 reference_frame = cpl_frameset_get_first_const(recipe_frameset); 00336 00337 /* Create the prop lists */ 00338 cpl_msg_info(__func__, "Creating the keywords list") ; 00339 referencelist = cpl_propertylist_load_regexp 00340 (cpl_frame_get_filename(reference_frame), 0,HAWKI_HEADER_EXT_FORWARD,0); 00341 extlists = 00342 cpl_malloc(HAWKI_NB_DETECTORS * sizeof(cpl_propertylist*)); 00343 for (idet=0 ; idet<HAWKI_NB_DETECTORS ; idet++) 00344 { 00345 /* Get the extension number */ 00346 ext_nb=hawki_get_ext_from_detector 00347 (cpl_frame_get_filename(reference_frame), idet+1); 00348 00349 /* Propagate the keywords from input frame extensions */ 00350 extlists[idet] = cpl_propertylist_load_regexp( 00351 cpl_frame_get_filename(reference_frame), ext_nb, 00352 HAWKI_HEADER_EXT_FORWARD, 0); 00353 00354 /* Add the stats of the stats */ 00355 cpl_propertylist_append(extlists[idet],stats_stats[idet]); 00356 } 00357 00358 /* Write the table with the statistics */ 00359 hawki_tables_save(recipe_frameset, 00360 recipe_parlist, 00361 recipe_frameset, 00362 (const cpl_table **)target_stats, 00363 recipe_name, 00364 calpro, 00365 protype, 00366 (const cpl_propertylist*)referencelist, 00367 (const cpl_propertylist**)extlists, 00368 "hawki_tec_filtchk_stats.fits"); 00369 00370 /* Free and return */ 00371 cpl_propertylist_delete(referencelist) ; 00372 for (idet=0 ; idet<HAWKI_NB_DETECTORS ; idet++) 00373 { 00374 cpl_propertylist_delete(extlists[idet]) ; 00375 } 00376 cpl_free(extlists) ; 00377 return 0; 00378 }
1.7.3