uves_utils.h

00001 /*
00002  * This file is part of the ESO UVES Pipeline
00003  * Copyright (C) 2004,2005 European Southern Observatory
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA
00018  */
00019 
00020 /*
00021  * $Author: amodigli $
00022  * $Date: 2008/03/25 08:55:21 $
00023  * $Revision: 1.99 $
00024  * $Name: uves-3_9_0 $
00025  * $Log: uves_utils.h,v $
00026  * Revision 1.99  2008/03/25 08:55:21  amodigli
00027  * check if inline is defined to remove possible compilation warnings
00028  *
00029  * Revision 1.98  2008/02/29 10:26:08  amodigli
00030  * added uves_rcosmic
00031  *
00032  * Revision 1.97  2008/02/15 12:43:21  amodigli
00033  * added uves_string_tolower uves_string_toupper
00034  *
00035  * Revision 1.96  2008/02/04 14:08:58  amodigli
00036  * added uves_parameterlist_duplicate
00037  *
00038  * Revision 1.95  2007/09/11 12:11:49  amodigli
00039  * added uves_frameset_extract
00040  *
00041  * Revision 1.94  2007/08/02 15:18:44  amodigli
00042  * added uves_frameset_dump
00043  *
00044  * Revision 1.93  2007/06/06 08:17:33  amodigli
00045  * replace tab with 4 spaces
00046  *
00047  * Revision 1.92  2007/05/22 11:30:57  jmlarsen
00048  * Removed MIDAS flag for good
00049  *
00050  * Revision 1.91  2007/05/02 13:18:52  jmlarsen
00051  * Added function to simulate reconstruct raw image
00052  *
00053  * Revision 1.90  2007/04/24 12:50:29  jmlarsen
00054  * Replaced cpl_propertylist -> uves_propertylist which is much faster
00055  *
00056  * Revision 1.89  2007/04/12 11:58:07  jmlarsen
00057  * Check compile time CPL version number
00058  *
00059  * Revision 1.88  2007/04/10 07:10:50  jmlarsen
00060  * uves_spline_hermite(): maintain current array position (for efficiency)
00061  *
00062  * Revision 1.87  2007/03/28 11:39:38  jmlarsen
00063  * Removed MIDAS flag from uves_define_noise
00064  *
00065  * Revision 1.86  2007/03/13 15:34:07  jmlarsen
00066  * Parametrize verbosity of autodegree fitting function
00067  *
00068  * Revision 1.85  2007/03/05 10:19:54  jmlarsen
00069  * Define SPEED_OF_LIGHT
00070  *
00071  * Revision 1.84  2007/02/22 15:34:48  jmlarsen
00072  * Implement gaussian function with linear background
00073  *
00074  * Revision 1.83  2006/11/13 12:49:38  jmlarsen
00075  * Removed re-definition of cpl_table_erase_selected
00076  *
00077  * Revision 1.82  2006/11/07 14:05:35  jmlarsen
00078  * Removed flag to enable/disable FLAMES code generation
00079  *
00080  * Revision 1.81  2006/11/06 15:19:42  jmlarsen
00081  * Removed unused include directives
00082  *
00083  * Revision 1.80  2006/11/03 15:01:21  jmlarsen
00084  * Killed UVES 3d table module and use CPL 3d tables
00085  *
00086  * Revision 1.79  2006/10/19 08:23:09  jmlarsen
00087  * Enabled FLAMES code
00088  *
00089  * Revision 1.78  2006/10/12 11:37:28  jmlarsen
00090  * Temporarily disabled FLAMES code generation
00091  *
00092  * Revision 1.77  2006/10/09 13:04:22  jmlarsen
00093  * Removed message domain parameter of uves_initialize
00094  *
00095  * Revision 1.76  2006/09/20 12:53:57  jmlarsen
00096  * Replaced stringcat functions with uves_sprintf()
00097  *
00098  * Revision 1.75  2006/09/08 14:05:39  jmlarsen
00099  * Added max/min allowed values in autodegree fitting
00100  *
00101  * Revision 1.74  2006/08/24 11:43:49  jmlarsen
00102  * Write recipe start/stop time to header
00103  *
00104  * Revision 1.73  2006/08/17 13:56:53  jmlarsen
00105  * Reduced max line length
00106  *
00107  * Revision 1.72  2006/08/11 14:37:30  jmlarsen
00108  * Implemented workaround for slow cpl_table_erase_selected
00109  *
00110  * Revision 1.71  2006/08/11 11:29:11  jmlarsen
00111  * uves_get_version_binary
00112  *
00113  * Revision 1.70  2006/08/08 11:27:18  amodigli
00114  * upgrade to CPL3
00115  *
00116  * Revision 1.69  2006/07/14 12:42:42  jmlarsen
00117  * Added function uves_strincat_4
00118  *
00119  * Revision 1.68  2006/06/22 09:44:02  jmlarsen
00120  * Added function to remove string prefix
00121  *
00122  * Revision 1.67  2006/06/01 14:43:17  jmlarsen
00123  * Added missing documentation
00124  *
00125  * Revision 1.66  2006/05/12 15:12:11  jmlarsen
00126  * Support minimum RMS in auto-degree fitting
00127  *
00128  * Revision 1.65  2006/05/05 13:58:09  jmlarsen
00129  * Added uves_polynomial_regression_2d_autodegree
00130  *
00131  * Revision 1.64  2006/04/24 09:26:37  jmlarsen
00132  * Added code to compute Moffat profile
00133  *
00134  * Revision 1.63  2006/04/06 08:51:43  jmlarsen
00135  * Allow setting WANT_TIME_MEASURE when ./configure'ing
00136  *
00137  * Revision 1.62  2006/03/24 13:48:09  jmlarsen
00138  * Macro to turn on/off timing info
00139  *
00140  * Revision 1.61  2006/03/09 10:55:50  jmlarsen
00141  * Added timing macros
00142  *
00143  * Revision 1.60  2006/02/28 09:15:23  jmlarsen
00144  * Minor update
00145  *
00146  * Revision 1.59  2006/02/21 14:26:54  jmlarsen
00147  * Minor changes
00148  *
00149  * Revision 1.58  2006/02/15 13:19:15  jmlarsen
00150  * Reduced source code max. line length
00151  *
00152  * Revision 1.57  2006/01/12 15:41:14  jmlarsen
00153  * Moved gauss. fitting to irplib
00154  *
00155  * Revision 1.56  2005/12/20 08:11:44  jmlarsen
00156  * Added CVS  entry
00157  *
00158  */
00159 #ifndef UVES_UTILS_H
00160 #define UVES_UTILS_H
00161 
00162 
00163 #ifdef HAVE_CONFIG_H
00164 #  include <config.h>
00165 #endif
00166 
00167 /*-----------------------------------------------------------------------------
00168                     Includes
00169  -----------------------------------------------------------------------------*/
00170 
00171 #include <uves_utils_polynomial.h>
00172 #include <uves_extract_iterate.h>
00173 #include <uves_extract_profile.h>
00174 #include <uves_chip.h>
00175 
00176 #include <cpl.h>
00177 #include <math.h>
00178 
00179 /*-----------------------------------------------------------------------------
00180                              Defines
00181  -----------------------------------------------------------------------------*/
00182 
00183 /* If __func__ is not declared, use a default function name */
00184 #if defined HAVE_DECL___FUNC__ && !HAVE_DECL___FUNC__
00185 //static const char __func__[] = "<fctid>";
00186 #ifndef __func__
00187 #define __func__ "<fct.id>"
00188 #endif
00189 #endif
00190 
00191 #ifndef inline
00192 #define inline /* inline */
00193 #endif
00194 
00195 /*
00196  * The purpose of this target is to
00197  * decrease the amount of messages
00198  * printed at the debug level.
00199  *
00200  * If set to non-zero, even more messages
00201  * are printed at the debug level
00202  * (sometimes 50 - 100 MB)
00203  *
00204  */
00205 #ifndef WANT_BIG_LOGFILE
00206 #define WANT_BIG_LOGFILE 0
00207 #endif
00208 
00209 /*
00210  * Set to 1 to show timing
00211  * information on msg-level = info
00212  */
00213 #ifndef WANT_TIME_MEASURE
00214 #define WANT_TIME_MEASURE 0
00215 #endif
00216 
00217 
00218 #if WANT_TIME_MEASURE
00219 #define UVES_TIME_START(what) uves_msg("Timing (%s, l%d) %s start", \
00220                        __FILE__, __LINE__, what)
00221 #define UVES_TIME_END         uves_msg("Timing (%s, l%d) end", \
00222                        __FILE__, __LINE__)
00223 #else
00224 #define UVES_TIME_START(what) uves_msg_debug("Timing (%s, l%d) %s start", \
00225                          __FILE__, __LINE__, what)
00226 #define UVES_TIME_END         uves_msg_debug("Timing (%s, l%d) end", \
00227                          __FILE__, __LINE__)
00228 #endif
00229 
00230 
00231 #ifndef stringify
00232 #ifndef make_str
00233 #define stringify(X) #X
00234 #define make_str(X) stringify(X)
00235 #endif
00236 #endif
00237 
00238 #define TWOSQRT2LN2 2.35482004503095
00239 
00240 #ifndef M_PI 
00241 #define M_PI 3.1415926535897932384626433832795
00242 #endif
00243 
00244 #define SPEED_OF_LIGHT  299792458    /* SI-units */
00245 
00246 #define COS_DEG(x) cos(((x)/180)*M_PI)
00247 #define SIN_DEG(x) sin(((x)/180)*M_PI)
00248 #define ACOS_DEG(x) (acos(x)*180/M_PI)
00249 
00250 /*-----------------------------------------------------------------------------
00251                                    Prototypes
00252  -----------------------------------------------------------------------------*/
00253 
00254 cpl_image *
00255 uves_create_image(uves_iterate_position *pos, enum uves_chip chip,
00256                   const cpl_image *spectrum, const cpl_image *sky,
00257                   const cpl_image *cosmic_image,
00258                   const uves_extract_profile *profile,
00259                   cpl_image **image_noise, uves_propertylist **image_header);
00260 cpl_frameset *
00261 uves_frameset_extract(const cpl_frameset *frames,const char *tag);
00262 
00263 const char*
00264 uves_string_tolower(char* s);
00265 const char*
00266 uves_string_toupper(char* s);
00267 
00268 double uves_gaussrand(void);
00269 double uves_pow_int(double x, int y);
00270 long uves_round_double(double x);
00271 double uves_max_double(double x, double y);
00272 int uves_max_int(int x, int y);
00273 double uves_min_double(double x, double y);
00274 int uves_min_int(int x, int y);
00275 double uves_error_fraction(double x, double y, double dx, double dy);
00276 const char *uves_get_license(void);
00277 cpl_error_code uves_get_version(int *major, int *minor, int *micro);
00278 int uves_get_version_binary(void);
00279 
00280 char * uves_initialize(cpl_frameset *frames, const cpl_parameterlist *parlist, 
00281                const char *recipe_id, const char *short_descr);
00282 cpl_error_code uves_end(const char *recipe_id, const cpl_frameset *frames);
00283 
00284 uves_propertylist *uves_initialize_image_header(const char *ctype1, const char *ctype2, 
00285                            const char *bunit,
00286                            double crval1 , double crval2,
00287                            double crpix1 , double crpix2,
00288                            double crdelt1, double crdelt2);
00289 
00290 cpl_parameterlist* 
00291 uves_parameterlist_duplicate(const cpl_parameterlist* pin);
00292 
00293 cpl_image *uves_define_noise(const cpl_image *image, const uves_propertylist *image_header,
00294                  int ncom, enum uves_chip);
00295 cpl_image *uves_average_images(const cpl_image *image1, const cpl_image *noise1,
00296                    const cpl_image *image2, const cpl_image *noise2,
00297                    cpl_image **noise);
00298 
00299 
00300 cpl_error_code uves_subtract_bias(cpl_image *image, const cpl_image *master_bias);
00301 cpl_error_code uves_subtract_dark(cpl_image *image, const uves_propertylist *image_header,
00302                   const cpl_image *master_dark, 
00303                   const uves_propertylist *mdark_header);
00304 
00305 polynomial *
00306 uves_polynomial_regression_2d_autodegree(cpl_table *t,
00307                      const char *X1, const char *X2, const char *Y,
00308                      const char *sigmaY,
00309                      const char *polynomial_fit,
00310                      const char *residual_square, 
00311                      const char *variance_fit,
00312                      double *mean_squared_error, double *red_chisq,
00313                      polynomial **variance, double kappa,
00314                      int maxdeg1, int maxdeg2, double min_rms,
00315                                          double min_reject,
00316                                          bool verbose,
00317                      const double *min_val,
00318                      const double *max_val,
00319                      int npos, double positions[][2]);
00320 
00321 polynomial *
00322 uves_polynomial_regression_2d(cpl_table *t,
00323                   const char *X1, const char *X2, const char *Y, 
00324                   const char *sigmaY,
00325                   int degree1, int degree2,
00326                   const char *polynomial_fit, const char *residual_square, 
00327                   const char *variance_fit,
00328                   double *mse, double *red_chisq,
00329                   polynomial **variance, double kappa,
00330                               double min_reject);
00331 
00332 polynomial *uves_polynomial_regression_1d(cpl_table *t, 
00333                       const char *X, const char *Y, const char *sigmaY, 
00334                       int degree, 
00335                       const char *polynomial_fit, const char *residual_square,
00336                       double *mean_squared_error, const double kappa);
00337 
00338 const char *uves_remove_string_prefix(const char *s, const char *prefix);
00339 
00340 double uves_spline_hermite_table( double xp, const cpl_table *t, const char *column_x, 
00341                   const char *column_y, int *istart );
00342 
00343 double uves_spline_hermite( double xp, const double *x, const double *y, int n, int *istart );
00344 
00345 double uves_spline_cubic(double xp, double *x, float *y, float *y2, int n, int *kstart );
00346 
00347 int uves_absolute_order(int first_abs_order, int last_abs_order, int relative_order);
00348 
00349 double uves_average_reject(cpl_table *t,
00350                const char *column,
00351                const char *residual2,
00352                double kappa);
00353 
00354 
00355 cpl_table *uves_ordertable_traces_new(void);
00356 cpl_error_code uves_ordertable_traces_add(cpl_table *traces, 
00357                       int fibre_ID, double fibre_offset, int fibre_mask);
00358 bool uves_table_is_sorted_double(const cpl_table *t, const char *column, const bool reverse);
00359 
00360 int uves_moffat(const double x[], const double a[], double *result);
00361 int uves_moffat_derivative(const double x[], const double a[], double result[]);
00362 int uves_gauss(const double x[], const double a[], double *result);
00363 int uves_gauss_derivative(const double x[], const double a[], double result[]);
00364 int uves_gauss_linear(const double x[], const double a[], double *result);
00365 int uves_gauss_linear_derivative(const double x[], const double a[], double result[]);
00366 void uves_check_version(void);
00367 void uves_frameset_dump(cpl_frameset* set);
00368 cpl_error_code
00369 uves_rcosmic(cpl_image* ima,
00370              cpl_image** flt,
00371              cpl_image** out,
00372              cpl_image** msk,
00373              const double sky,
00374              const double ron,
00375              const double gain,
00376              const int ns,
00377              const double rc);
00378 #endif

Generated on Fri Apr 18 14:11:43 2008 for UVES Pipeline Reference Manual by  doxygen 1.5.1