uves_physmod_stability_check.c

00001 /*                                                                            *
00002  *   This file is part of the ESO UVES Pipeline                               *
00003  *   Copyright (C) 2004,2005 European Southern Observatory                    *
00004  *                                                                            *
00005  *   This library 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: 2007/06/26 15:08:42 $
00023  * $Revision: 1.12 $
00024  * $Name: uves-3_4_5 $
00025  * $Log: uves_physmod_stability_check.c,v $
00026  * Revision 1.12  2007/06/26 15:08:42  amodigli
00027  * commented table dumping
00028  *
00029  * Revision 1.11  2007/06/25 16:34:52  amodigli
00030  * cleaned
00031  *
00032  * Revision 1.10  2007/06/06 08:17:33  amodigli
00033  * replace tab with 4 spaces
00034  *
00035  * Revision 1.9  2006/11/06 15:19:41  jmlarsen
00036  * Removed unused include directives
00037  *
00038  * Revision 1.8  2006/08/24 06:36:10  amodigli
00039  * fixed doxygen warning
00040  *
00041  * Revision 1.7  2006/08/22 14:17:00  amodigli
00042  * fixed bug on computing MedDY
00043  *
00044  * Revision 1.6  2006/08/08 15:41:19  amodigli
00045  * fixed bug in aligning actual and ref tables
00046  *
00047  * Revision 1.5  2006/08/02 07:02:05  amodigli
00048  * stability check more robust: size of actual and ref table may differ
00049  *
00050  * Revision 1.4  2006/07/31 06:29:26  amodigli
00051  * added QC on stability test
00052  *
00053  * Revision 1.3  2006/07/28 14:51:26  amodigli
00054  * fixed some bugs on improper table selection
00055  *
00056  * Revision 1.2  2006/06/28 13:28:29  amodigli
00057  * improved output
00058  *
00059  * Revision 1.1  2006/02/03 07:46:30  jmlarsen
00060  * Moved recipe implementations to ./uves directory
00061  *
00062  * Revision 1.4  2006/01/20 10:36:25  amodigli
00063  *
00064  * Fixed warings from doxigen
00065  *
00066  * Revision 1.3  2006/01/19 08:47:24  jmlarsen
00067  * Inserted missing doxygen end tag
00068  *
00069  * Revision 1.2  2006/01/16 13:52:58  jmlarsen
00070  * Removed memory leak
00071  *
00072  * Revision 1.1  2006/01/16 08:02:50  amodigli
00073  *
00074  * Added
00075  *
00076  * Revision 1.4  2006/01/09 14:05:42  amodigli
00077  * Fixed doxigen warnings
00078  *
00079  * Revision 1.3  2005/12/20 08:11:44  jmlarsen
00080  * Added CVS  entry
00081  *
00082  */
00083 
00084 /*----------------------------------------------------------------------------*/
00088 /*---------------------------------------------------------------------------*/
00090 #ifdef HAVE_CONFIG_H
00091 #  include <config.h>
00092 #endif
00093 
00094 
00095 /*-----------------------------------------------------------------------------
00096                                 Includes
00097  ----------------------------------------------------------------------------*/
00098 #include <uves_physmod_stability_check.h>
00099 #include <uves_utils_wrappers.h>
00100 #include <uves_msg.h>
00101 #include <uves_error.h>
00102 
00103 /*-----------------------------------------------------------------------------
00104                                 Defines
00105  ----------------------------------------------------------------------------*/
00106 /*-----------------------------------------------------------------------------
00107                             Functions prototypes
00108  ----------------------------------------------------------------------------*/
00109 /*-----------------------------------------------------------------------------
00110                             Static variables
00111  ----------------------------------------------------------------------------*/
00112 
00113 /*-----------------------------------------------------------------------------
00114                             Functions code
00115  ----------------------------------------------------------------------------*/
00116 
00117 /*---------------------------------------------------------------------------*/
00133 /*---------------------------------------------------------------------------*/
00134 
00135 int uves_physmod_stability_check(cpl_table* m_tbl, 
00136                                  cpl_table* r_tbl, 
00137                                  double* med_dx,
00138                                  double* med_dy,
00139                                  double* avg_dx,
00140                                  double* avg_dy)
00141 
00142 {
00143 
00144 
00145   cpl_table* tmp_tbl1=NULL;
00146   cpl_table* tmp_tbl2=NULL;
00147   cpl_table* tmp_tbl3=NULL;
00148   cpl_table* tmp_tbl4=NULL;
00149   cpl_table* tmp_tbl5=NULL;
00150   int msz=0;
00151   int rsz=0;
00152   int ref=0;
00153   int status=0;
00154   /* note those are swapped */
00155   check_nomsg(cpl_table_duplicate_column(m_tbl,"X",m_tbl,"XMES"));
00156   check_nomsg(cpl_table_duplicate_column(m_tbl,"Y",m_tbl,"YMES"));
00157   check_nomsg(cpl_table_duplicate_column(m_tbl,"S",m_tbl,"STATUS"));
00158   check_nomsg(cpl_table_duplicate_column(m_tbl,"O",m_tbl,"ORDER"));
00159   check_nomsg(cpl_table_duplicate_column(m_tbl,"ID",m_tbl,"IDENT"));
00160 
00161   check_nomsg(cpl_table_duplicate_column(r_tbl,"X",r_tbl,"XMES"));
00162   check_nomsg(cpl_table_duplicate_column(r_tbl,"Y",r_tbl,"YMES"));
00163   check_nomsg(cpl_table_duplicate_column(r_tbl,"S",r_tbl,"STATUS"));
00164   check_nomsg(cpl_table_duplicate_column(r_tbl,"O",r_tbl,"ORDER"));
00165   check_nomsg(cpl_table_duplicate_column(r_tbl,"ID",r_tbl,"IDENT"));
00166 
00167   check_nomsg(msz=cpl_table_get_nrow(m_tbl));
00168   check_nomsg(rsz=cpl_table_get_nrow(r_tbl));
00169 
00170   if(msz > rsz) {
00171     check_nomsg(cpl_table_set_size(r_tbl,msz));
00172     uves_msg_warning("Actual and reference tables have different sizes");
00173   } else if (msz < rsz) {
00174     check_nomsg(cpl_table_set_size(m_tbl,rsz));
00175     uves_msg_warning("Actual and reference tables have different sizes");
00176   } 
00177   /* copy values measured on actual frame into table from reference frame */
00178   check_nomsg(cpl_table_duplicate_column(r_tbl,"Xm",m_tbl,"X"));
00179   check_nomsg(cpl_table_duplicate_column(r_tbl,"Ym",m_tbl,"Y"));
00180   check_nomsg(cpl_table_duplicate_column(r_tbl,"Sm",m_tbl,"S"));
00181   check_nomsg(cpl_table_duplicate_column(r_tbl,"Om",m_tbl,"O"));
00182   check_nomsg(cpl_table_duplicate_column(r_tbl,"IDm",m_tbl,"ID"));
00183   check_nomsg(cpl_table_duplicate_column(r_tbl,"WAVEm",m_tbl,"WAVE"));
00184 
00185   /* initialize difference columns with values from actual frame measures */
00186   check_nomsg(cpl_table_duplicate_column(r_tbl,"DX",r_tbl,"Xm"));
00187   check_nomsg(cpl_table_duplicate_column(r_tbl,"DY",r_tbl,"Ym"));
00188   check_nomsg(cpl_table_duplicate_column(r_tbl,"DO",r_tbl,"Om"));
00189   check_nomsg(cpl_table_duplicate_column(r_tbl,"DID",r_tbl,"IDm"));
00190   check_nomsg(cpl_table_duplicate_column(r_tbl,"DW",r_tbl,"WAVEm"));
00191 
00192   /* subtract values measured on reference frame */
00193   check_nomsg(cpl_table_subtract_columns(r_tbl,"DX","X"));
00194   check_nomsg(cpl_table_subtract_columns(r_tbl,"DY","Y"));
00195   check_nomsg(cpl_table_subtract_columns(r_tbl,"DO","O"));
00196   check_nomsg(cpl_table_subtract_columns(r_tbl,"DID","ID"));
00197   check_nomsg(cpl_table_subtract_columns(r_tbl,"DW","WAVE"));
00198 
00199   /* WE GET THE ABSOLUTE VALUE: sqrt(X^2)*/
00200   check(cpl_table_power_column(r_tbl,"DW",2.),"Error computing power column");
00201   check(cpl_table_power_column(r_tbl,"DW",0.5),"Error computing power column");
00202 
00203   /* select proper values */
00204   check(tmp_tbl1=uves_extract_table_rows(r_tbl,"DO",CPL_EQUAL_TO,
00205           0),"Error selecting DO");
00206   check(tmp_tbl2=uves_extract_table_rows(tmp_tbl1,"DW",CPL_LESS_THAN,
00207           0.001),"Error selecting DW");
00208   check(tmp_tbl3=uves_extract_table_rows(tmp_tbl2,"DID",CPL_LESS_THAN,
00209           0.001),"Error selecting DID");
00210   check(tmp_tbl4=uves_extract_table_rows(tmp_tbl3,"S",CPL_EQUAL_TO,
00211           0),"Error selecting S");
00212   check(tmp_tbl5=uves_extract_table_rows(tmp_tbl4,"Sm",CPL_EQUAL_TO,
00213           0),"Error selecting Sm");
00214   check_nomsg(ref=cpl_table_get_nrow(tmp_tbl5)/2);
00215   //cpl_table_dump(tmp_tbl5,1,2,stdout);
00216   check_nomsg(*med_dx=cpl_table_get_column_median(tmp_tbl5,"DX"));
00217   check_nomsg(*med_dy=cpl_table_get_column_median(tmp_tbl5,"DY"));
00218   check_nomsg(*avg_dx=cpl_table_get_column_mean(tmp_tbl5,"DX"));
00219   check_nomsg(*avg_dy=cpl_table_get_column_mean(tmp_tbl5,"DY"));
00220   /*
00221   uves_msg("Stability check results: Median DX = %5.3f Median DY = %5.3f",
00222            *med_dx,*med_dy);
00223        */       
00224   uves_msg("Stability check results: Mean DX = %5.3f Mean DY = %5.3f",
00225            *avg_dx,*avg_dy);
00226   check_nomsg(uves_sort_table_1(tmp_tbl5,"DX",0));
00227   check_nomsg(*med_dx=cpl_table_get_double(tmp_tbl5,"DX",ref,&status));
00228   check_nomsg(uves_sort_table_1(tmp_tbl5,"DY",0));
00229   check_nomsg(*med_dy=cpl_table_get_double(tmp_tbl5,"DY",ref,&status));
00230   /* median computed as in UVES-MIDAS */
00231   uves_msg("Stability check results: Median DX = %5.3f Median DY = %5.3f",
00232            *med_dx,*med_dy);
00233 
00234  cleanup:
00235   uves_free_table(&tmp_tbl1);
00236   uves_free_table(&tmp_tbl2);
00237   uves_free_table(&tmp_tbl3);
00238   uves_free_table(&tmp_tbl4);
00239   uves_free_table(&tmp_tbl5);
00240 
00241  return 0;
00242 
00243 
00244 }

Generated on Thu Nov 15 14:32:29 2007 for UVES Pipeline Reference Manual by  doxygen 1.5.1