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/12/17 07:56:36 $
00023  * $Revision: 1.15 $
00024  * $Name: uves-4_2_2 $
00025  * $Log: uves_physmod_stability_check.c,v $
00026  * Revision 1.15  2007/12/17 07:56:36  amodigli
00027  * we now compute a clean median as in MIDAS
00028  *
00029  * Revision 1.14  2007/12/03 17:00:14  amodigli
00030  * removed dependency from flames and fixed a warning
00031  *
00032  * Revision 1.13  2007/12/03 10:39:36  amodigli
00033  * added uves_physmod_align_tables flames_align_table_column
00034  *
00035  * Revision 1.12  2007/06/26 15:08:42  amodigli
00036  * commented table dumping
00037  *
00038  * Revision 1.11  2007/06/25 16:34:52  amodigli
00039  * cleaned
00040  *
00041  * Revision 1.10  2007/06/06 08:17:33  amodigli
00042  * replace tab with 4 spaces
00043  *
00044  * Revision 1.9  2006/11/06 15:19:41  jmlarsen
00045  * Removed unused include directives
00046  *
00047  * Revision 1.8  2006/08/24 06:36:10  amodigli
00048  * fixed doxygen warning
00049  *
00050  * Revision 1.7  2006/08/22 14:17:00  amodigli
00051  * fixed bug on computing MedDY
00052  *
00053  * Revision 1.6  2006/08/08 15:41:19  amodigli
00054  * fixed bug in aligning actual and ref tables
00055  *
00056  * Revision 1.5  2006/08/02 07:02:05  amodigli
00057  * stability check more robust: size of actual and ref table may differ
00058  *
00059  * Revision 1.4  2006/07/31 06:29:26  amodigli
00060  * added QC on stability test
00061  *
00062  * Revision 1.3  2006/07/28 14:51:26  amodigli
00063  * fixed some bugs on improper table selection
00064  *
00065  * Revision 1.2  2006/06/28 13:28:29  amodigli
00066  * improved output
00067  *
00068  * Revision 1.1  2006/02/03 07:46:30  jmlarsen
00069  * Moved recipe implementations to ./uves directory
00070  *
00071  * Revision 1.4  2006/01/20 10:36:25  amodigli
00072  *
00073  * Fixed warings from doxigen
00074  *
00075  * Revision 1.3  2006/01/19 08:47:24  jmlarsen
00076  * Inserted missing doxygen end tag
00077  *
00078  * Revision 1.2  2006/01/16 13:52:58  jmlarsen
00079  * Removed memory leak
00080  *
00081  * Revision 1.1  2006/01/16 08:02:50  amodigli
00082  *
00083  * Added
00084  *
00085  * Revision 1.4  2006/01/09 14:05:42  amodigli
00086  * Fixed doxigen warnings
00087  *
00088  * Revision 1.3  2005/12/20 08:11:44  jmlarsen
00089  * Added CVS  entry
00090  *
00091  */
00092 
00093 /*----------------------------------------------------------------------------*/
00097 /*---------------------------------------------------------------------------*/
00099 #ifdef HAVE_CONFIG_H
00100 #  include <config.h>
00101 #endif
00102 
00103 
00104 /*-----------------------------------------------------------------------------
00105                                 Includes
00106  ----------------------------------------------------------------------------*/
00107 #include <uves_physmod_stability_check.h>
00108 #include <uves_utils_wrappers.h>
00109 #include <uves_msg.h>
00110 #include <uves_error.h>
00111 
00112 /*-----------------------------------------------------------------------------
00113                                 Defines
00114  ----------------------------------------------------------------------------*/
00115 /*-----------------------------------------------------------------------------
00116                             Functions prototypes
00117  ----------------------------------------------------------------------------*/
00118 /*-----------------------------------------------------------------------------
00119                             Static variables
00120  ----------------------------------------------------------------------------*/
00121 
00122 static int 
00123 uves_physmod_align_tables(cpl_table** m_tbl, 
00124               cpl_table** r_tbl);
00125 
00126 
00127 static int
00128 flames_align_table_column(cpl_table** m_tbl,cpl_table** r_tbl,const char* col);
00129 
00130 /*-----------------------------------------------------------------------------
00131                             Functions code
00132  ----------------------------------------------------------------------------*/
00133 
00134 /*---------------------------------------------------------------------------*/
00150 /*---------------------------------------------------------------------------*/
00151 
00152 int uves_physmod_stability_check(cpl_table* m_tbl, 
00153                                  cpl_table* r_tbl, 
00154                                  double* med_dx,
00155                                  double* med_dy,
00156                                  double* avg_dx,
00157                                  double* avg_dy)
00158 
00159 {
00160 
00161 
00162   cpl_table* tmp_tbl1=NULL;
00163   cpl_table* tmp_tbl2=NULL;
00164   cpl_table* tmp_tbl3=NULL;
00165   cpl_table* tmp_tbl4=NULL;
00166 
00167   cpl_table* tmp_tbl5=NULL;
00168 
00169 
00170   double std_dx=0;
00171   double std_dy=0;
00172 
00173   int msz=0;
00174   int rsz=0;
00175   int ref=0;
00176   int status=0;  /* note those are swapped */
00177   check_nomsg(cpl_table_duplicate_column(m_tbl,"X",m_tbl,"XMES"));
00178   check_nomsg(cpl_table_duplicate_column(m_tbl,"Y",m_tbl,"YMES"));
00179   check_nomsg(cpl_table_duplicate_column(m_tbl,"S",m_tbl,"STATUS"));
00180   check_nomsg(cpl_table_duplicate_column(m_tbl,"O",m_tbl,"ORDER"));
00181   check_nomsg(cpl_table_duplicate_column(m_tbl,"ID",m_tbl,"IDENT"));
00182 
00183   check_nomsg(cpl_table_duplicate_column(r_tbl,"X",r_tbl,"XMES"));
00184   check_nomsg(cpl_table_duplicate_column(r_tbl,"Y",r_tbl,"YMES"));
00185   check_nomsg(cpl_table_duplicate_column(r_tbl,"S",r_tbl,"STATUS"));
00186   check_nomsg(cpl_table_duplicate_column(r_tbl,"O",r_tbl,"ORDER"));
00187   check_nomsg(cpl_table_duplicate_column(r_tbl,"ID",r_tbl,"IDENT"));
00188 
00189   check_nomsg(msz=cpl_table_get_nrow(m_tbl));
00190   check_nomsg(rsz=cpl_table_get_nrow(r_tbl));
00191 
00192   cpl_table_save(m_tbl, NULL, NULL, "m_tbl.fits", CPL_IO_DEFAULT);
00193   cpl_table_save(r_tbl, NULL, NULL, "r_tbl.fits", CPL_IO_DEFAULT);
00194   if(msz > rsz) {
00195     check_nomsg(cpl_table_set_size(r_tbl,msz));
00196     uves_msg_warning("Actual and reference tables have different sizes: act=%d ref=%d",msz,rsz);
00197     uves_physmod_align_tables(&m_tbl,&r_tbl);
00198 
00199     check_nomsg(msz=cpl_table_get_nrow(m_tbl));
00200     check_nomsg(rsz=cpl_table_get_nrow(r_tbl));
00201     uves_msg_warning("After correction actual and reference tables have different sizes: act=%d ref=%d",msz,rsz);
00202 
00203   } else if (msz < rsz) {
00204     check_nomsg(cpl_table_set_size(m_tbl,rsz));
00205     uves_msg_warning("Actual and reference tables have different sizes: act=%d ref=%d",msz,rsz);
00206     uves_physmod_align_tables(&m_tbl,&r_tbl);
00207     check_nomsg(msz=cpl_table_get_nrow(m_tbl));
00208     check_nomsg(rsz=cpl_table_get_nrow(r_tbl));
00209     uves_msg_warning("After correction actual and reference tables have different sizes: act=%d ref=%d",msz,rsz);
00210 
00211   } 
00212   cpl_table_save(m_tbl, NULL, NULL, "after_m_tbl.fits", CPL_IO_DEFAULT);
00213   cpl_table_save(r_tbl, NULL, NULL, "after_r_tbl.fits", CPL_IO_DEFAULT);
00214 
00215   /* copy values measured on actual frame into table from reference frame */
00216   check_nomsg(cpl_table_duplicate_column(r_tbl,"Xm",m_tbl,"X"));
00217   check_nomsg(cpl_table_duplicate_column(r_tbl,"Ym",m_tbl,"Y"));
00218   check_nomsg(cpl_table_duplicate_column(r_tbl,"Sm",m_tbl,"S"));
00219   check_nomsg(cpl_table_duplicate_column(r_tbl,"Om",m_tbl,"O"));
00220   check_nomsg(cpl_table_duplicate_column(r_tbl,"IDm",m_tbl,"ID"));
00221   check_nomsg(cpl_table_duplicate_column(r_tbl,"WAVEm",m_tbl,"WAVE"));
00222 
00223   /* initialize difference columns with values from actual frame measures */
00224   check_nomsg(cpl_table_duplicate_column(r_tbl,"DX",r_tbl,"Xm"));
00225   check_nomsg(cpl_table_duplicate_column(r_tbl,"DY",r_tbl,"Ym"));
00226   check_nomsg(cpl_table_duplicate_column(r_tbl,"DO",r_tbl,"Om"));
00227   check_nomsg(cpl_table_duplicate_column(r_tbl,"DID",r_tbl,"IDm"));
00228   check_nomsg(cpl_table_duplicate_column(r_tbl,"DW",r_tbl,"WAVEm"));
00229 
00230   /* subtract values measured on reference frame */
00231   check_nomsg(cpl_table_subtract_columns(r_tbl,"DX","X"));
00232   check_nomsg(cpl_table_subtract_columns(r_tbl,"DY","Y"));
00233   check_nomsg(cpl_table_subtract_columns(r_tbl,"DO","O"));
00234   check_nomsg(cpl_table_subtract_columns(r_tbl,"DID","ID"));
00235   check_nomsg(cpl_table_subtract_columns(r_tbl,"DW","WAVE"));
00236 
00237   /* WE GET THE ABSOLUTE VALUE: sqrt(X^2)*/
00238   check(cpl_table_power_column(r_tbl,"DW",2.),"Error computing power column");
00239   check(cpl_table_power_column(r_tbl,"DW",0.5),"Error computing power column");
00240 
00241   /* select proper values */
00242   check(tmp_tbl1=uves_extract_table_rows(r_tbl,"DO",CPL_EQUAL_TO,
00243           0),"Error selecting DO");
00244   check(tmp_tbl2=uves_extract_table_rows(tmp_tbl1,"DW",CPL_LESS_THAN,
00245           0.001),"Error selecting DW");
00246   check(tmp_tbl3=uves_extract_table_rows(tmp_tbl2,"DID",CPL_LESS_THAN,
00247           0.001),"Error selecting DID");
00248   check(tmp_tbl4=uves_extract_table_rows(tmp_tbl3,"S",CPL_EQUAL_TO,
00249           0),"Error selecting S");
00250   check(tmp_tbl5=uves_extract_table_rows(tmp_tbl4,"Sm",CPL_EQUAL_TO,
00251           0),"Error selecting Sm");
00252   check_nomsg(ref=cpl_table_get_nrow(tmp_tbl5)/2);
00253   //cpl_table_dump(tmp_tbl5,1,2,stdout);
00254   check_nomsg(*med_dx=cpl_table_get_column_median(tmp_tbl5,"DX"));
00255   check_nomsg(*med_dy=cpl_table_get_column_median(tmp_tbl5,"DY"));
00256   check_nomsg(*avg_dx=cpl_table_get_column_mean(tmp_tbl5,"DX"));
00257   check_nomsg(*avg_dy=cpl_table_get_column_mean(tmp_tbl5,"DY"));
00258   check_nomsg(std_dx=cpl_table_get_column_stdev(tmp_tbl5,"DX"));
00259   check_nomsg(std_dy=cpl_table_get_column_stdev(tmp_tbl5,"DY"));
00260   /*
00261   uves_msg("Stability check results: Median DX = %5.3f Median DY = %5.3f",
00262            *med_dx,*med_dy);
00263        */       
00264   uves_msg("Stability check results: Mean DX = %5.3f Mean DY = %5.3f",
00265            *avg_dx,*avg_dy);
00266   check_nomsg(uves_sort_table_1(tmp_tbl5,"DX",0));
00267   check_nomsg(*med_dx=cpl_table_get_double(tmp_tbl5,"DX",ref,&status));
00268 
00269   uves_free_table(&tmp_tbl1);
00270   uves_free_table(&tmp_tbl2);
00271 
00272   if(std_dx > 0) {
00273     check(tmp_tbl1=uves_extract_table_rows(tmp_tbl5,"DX",CPL_GREATER_THAN,
00274                        *avg_dx-3*std_dx),"Error selecting DO");
00275 
00276     check(tmp_tbl2=uves_extract_table_rows(tmp_tbl1,"DX",CPL_LESS_THAN,
00277                        *avg_dx+3*std_dx),"Error selecting DO");
00278 
00279     check_nomsg(*med_dx=cpl_table_get_column_median(tmp_tbl2,"DX"));
00280 
00281     uves_free_table(&tmp_tbl1);
00282     uves_free_table(&tmp_tbl2);
00283   }
00284 
00285 
00286 
00287   check_nomsg(uves_sort_table_1(tmp_tbl5,"DY",0));
00288   check_nomsg(*med_dy=cpl_table_get_double(tmp_tbl5,"DY",ref,&status));
00289 
00290 
00291 
00292 
00293   if(std_dy > 0) {
00294     check(tmp_tbl1=uves_extract_table_rows(tmp_tbl5,"DY",CPL_GREATER_THAN,
00295                        *avg_dy-3*std_dy),"Error selecting DO");
00296 
00297     check(tmp_tbl2=uves_extract_table_rows(tmp_tbl1,"DY",CPL_LESS_THAN,
00298                        *avg_dy+3*std_dy),"Error selecting DO");
00299 
00300     check_nomsg(*med_dy=cpl_table_get_column_median(tmp_tbl2,"DY"));
00301 
00302     uves_free_table(&tmp_tbl1);
00303     uves_free_table(&tmp_tbl2);
00304   }
00305   /* median computed as in UVES-MIDAS */
00306   uves_msg("Stability check results: Median DX = %5.3f Median DY = %5.3f",
00307            *med_dx,*med_dy);
00308 
00309  cleanup:
00310   uves_free_table(&tmp_tbl1);
00311   uves_free_table(&tmp_tbl2);
00312   uves_free_table(&tmp_tbl3);
00313   uves_free_table(&tmp_tbl4);
00314   uves_free_table(&tmp_tbl5);
00315 
00316  return 0;
00317 
00318 
00319 }
00320 
00321 /*---------------------------------------------------------------------------*/
00332 /*---------------------------------------------------------------------------*/
00333 
00334 
00335 static int
00336 flames_align_table_column(cpl_table** m_tbl,cpl_table** r_tbl,const char* col)
00337 {
00338 
00339   double* pmw=NULL;
00340   double* prw=NULL;
00341   int* pmc=NULL;
00342   int* prc=NULL;
00343   int* pmo=NULL;
00344   int* pro=NULL;
00345   int nm=0;
00346   int nr=0;
00347   int i=0;
00348   int j=0;
00349 
00350  
00351   check_nomsg(pmw=cpl_table_get_data_double(*m_tbl,col));
00352   check_nomsg(prw=cpl_table_get_data_double(*r_tbl,col));
00353   check_nomsg(pmc=cpl_table_get_data_int(*m_tbl,"CHECK"));
00354   check_nomsg(prc=cpl_table_get_data_int(*r_tbl,"CHECK"));
00355   check_nomsg(pmo=cpl_table_get_data_int(*m_tbl,"CHECK"));
00356   check_nomsg(pro=cpl_table_get_data_int(*r_tbl,"CHECK"));
00357   check_nomsg(nm=cpl_table_get_nrow(*m_tbl));
00358   check_nomsg(nr=cpl_table_get_nrow(*r_tbl));
00359   for(i=0;i<nm;i++) {
00360     for(j=0;j<nr;j++) {
00361 
00362       if((pmw[i]==prw[j]) && (pmo[i]==pro[j])) {
00363     pmc[i]=1;
00364     prc[j]=1;
00365       }
00366 
00367     }
00368   }
00369  cleanup:
00370 
00371   return 0;
00372 
00373 }
00374 
00375 /*---------------------------------------------------------------------------*/
00385 /*---------------------------------------------------------------------------*/
00386 
00387 static int 
00388 uves_physmod_align_tables(cpl_table** m_tbl, 
00389               cpl_table** r_tbl)
00390 {
00391   cpl_table* tmp=NULL;
00392 
00393   uves_propertylist* plist=NULL;
00394   int ord_min=0;
00395   int ord_max=0;
00396   double wav_min=0;
00397   double wav_max=0;
00398   int i=0;
00399   int nm=0;
00400   int nr=0;
00401   int nsel=0;
00402 
00403 
00404   check_nomsg(nm=cpl_table_get_nrow(*m_tbl));
00405   check_nomsg(nr=cpl_table_get_nrow(*r_tbl));
00406 
00407   check_nomsg(plist=uves_propertylist_new());
00408   check_nomsg(uves_propertylist_append_bool(plist,"ORDER",0)); /* 1 for descending order */
00409   check_nomsg(uves_propertylist_append_bool(plist,"WAVE",0));  /* 0 for ascending order */
00410   check_nomsg(uves_table_sort(*m_tbl,plist));
00411   check_nomsg(uves_table_sort(*r_tbl,plist));
00412   uves_free_propertylist(&plist);
00413 
00414 
00415   ord_min=(cpl_table_get_column_min(*m_tbl,"ORDER")>
00416            cpl_table_get_column_min(*r_tbl,"ORDER")) ?  
00417     cpl_table_get_column_min(*m_tbl,"ORDER") :
00418     cpl_table_get_column_min(*r_tbl,"ORDER");
00419 
00420 
00421 
00422   ord_max=(cpl_table_get_column_max(*m_tbl,"ORDER")<
00423            cpl_table_get_column_max(*r_tbl,"ORDER")) ?  
00424     cpl_table_get_column_max(*m_tbl,"ORDER") :
00425     cpl_table_get_column_max(*r_tbl,"ORDER");
00426 
00427 
00428     
00429 
00430   uves_msg_warning("ord_min=%d",ord_min);
00431   uves_msg_warning("ord_max=%d",ord_max);
00432 
00433 
00434  wav_min=(cpl_table_get_column_min(*m_tbl,"WAVE")>
00435            cpl_table_get_column_min(*r_tbl,"WAVE")) ?  
00436     cpl_table_get_column_min(*m_tbl,"WAVE") :
00437     cpl_table_get_column_min(*r_tbl,"WAVE");
00438 
00439 
00440 
00441   wav_max=(cpl_table_get_column_max(*m_tbl,"WAVE")<
00442            cpl_table_get_column_max(*r_tbl,"WAVE")) ?  
00443     cpl_table_get_column_max(*m_tbl,"WAVE") :
00444     cpl_table_get_column_max(*r_tbl,"WAVE");
00445 
00446 
00447   uves_msg_warning("wav_min=%g",wav_min);
00448   uves_msg_warning("wav_max=%g",wav_max);
00449 
00450 
00451   check_nomsg(nsel=cpl_table_and_selected_int(*m_tbl,"ORDER",CPL_NOT_LESS_THAN,ord_min));
00452   check_nomsg(nsel=cpl_table_and_selected_int(*m_tbl,"ORDER",CPL_NOT_GREATER_THAN,ord_max));
00453   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_LESS_THAN,wav_min));
00454   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_GREATER_THAN,wav_max));
00455   uves_msg_warning("nsel=%d",nsel);
00456   check_nomsg(tmp=cpl_table_extract_selected(*m_tbl));
00457   uves_free_table(m_tbl);
00458   check_nomsg(*m_tbl=cpl_table_duplicate(tmp));
00459 
00460 
00461 
00462 
00463   check_nomsg(nsel=cpl_table_and_selected_int(*r_tbl,"ORDER",CPL_NOT_LESS_THAN,ord_min));
00464   check_nomsg(nsel=cpl_table_and_selected_int(*r_tbl,"ORDER",CPL_NOT_GREATER_THAN,ord_max));
00465   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_LESS_THAN,wav_min));
00466   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_GREATER_THAN,wav_max));
00467   uves_msg_warning("nsel=%d",nsel);
00468   check_nomsg(tmp=cpl_table_extract_selected(*r_tbl));
00469   uves_free_table(r_tbl);
00470   check_nomsg(*r_tbl=cpl_table_duplicate(tmp));
00471 
00472 
00473 
00474   cpl_table_new_column(*m_tbl,"CHECK",CPL_TYPE_INT);
00475   cpl_table_new_column(*r_tbl,"CHECK",CPL_TYPE_INT);
00476   cpl_table_fill_column_window_int(*r_tbl,"CHECK",0,nr,0);
00477   cpl_table_fill_column_window_int(*m_tbl,"CHECK",0,nm,0);
00478 
00479 
00480   for(i=ord_min;i<=ord_max;i++) {
00481 
00482     cpl_table_and_selected_int(*m_tbl,"ORDER",CPL_EQUAL_TO,i);
00483     cpl_table_and_selected_int(*r_tbl,"ORDER",CPL_EQUAL_TO,i);
00484     flames_align_table_column(m_tbl,r_tbl,"WAVE");
00485 
00486 
00487   }
00488   cpl_table_select_all(*m_tbl);
00489   cpl_table_select_all(*r_tbl);
00490 
00491 
00492  wav_min=(cpl_table_get_column_min(*m_tbl,"WAVE")>
00493            cpl_table_get_column_min(*r_tbl,"WAVE")) ?  
00494     cpl_table_get_column_min(*m_tbl,"WAVE") :
00495     cpl_table_get_column_min(*r_tbl,"WAVE");
00496 
00497 
00498 
00499   wav_max=(cpl_table_get_column_max(*m_tbl,"WAVE")<
00500            cpl_table_get_column_max(*r_tbl,"WAVE")) ?  
00501     cpl_table_get_column_max(*m_tbl,"WAVE") :
00502     cpl_table_get_column_max(*r_tbl,"WAVE");
00503 
00504 
00505   uves_msg_warning("wav_min=%g",wav_min);
00506   uves_msg_warning("wav_max=%g",wav_max);
00507 
00508   check_nomsg(nsel=cpl_table_and_selected_int(*m_tbl,"ORDER",CPL_NOT_LESS_THAN,ord_min));
00509   check_nomsg(nsel=cpl_table_and_selected_int(*m_tbl,"ORDER",CPL_NOT_GREATER_THAN,ord_max));
00510   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_LESS_THAN,wav_min));
00511   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_GREATER_THAN,wav_max));
00512   check_nomsg(nsel=cpl_table_and_selected_int(*m_tbl,"CHECK",CPL_EQUAL_TO,1));
00513   uves_msg_warning("nsel=%d",nsel);
00514   check_nomsg(tmp=cpl_table_extract_selected(*m_tbl));
00515   uves_free_table(m_tbl);
00516   check_nomsg(*m_tbl=cpl_table_duplicate(tmp));
00517 
00518   check_nomsg(nsel=cpl_table_and_selected_int(*r_tbl,"ORDER",CPL_NOT_LESS_THAN,ord_min));
00519   check_nomsg(nsel=cpl_table_and_selected_int(*r_tbl,"ORDER",CPL_NOT_GREATER_THAN,ord_max));
00520   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_LESS_THAN,wav_min));
00521   check_nomsg(nsel=cpl_table_and_selected_double(*m_tbl,"WAVE",CPL_NOT_GREATER_THAN,wav_max));
00522   check_nomsg(nsel=cpl_table_and_selected_int(*r_tbl,"CHECK",CPL_EQUAL_TO,1));
00523   uves_msg_warning("nsel=%d",nsel);
00524   check_nomsg(tmp=cpl_table_extract_selected(*r_tbl));
00525   uves_free_table(r_tbl);
00526   check_nomsg(*r_tbl=cpl_table_duplicate(tmp));
00527  
00528   
00529 
00530  cleanup:
00531 
00532 
00533 
00534   //uves_free_string_const(&rout);
00535   //uves_free_string_const(&mout);
00536 
00537   return 0;
00538 }
00539 
00540 

Generated on Mon Apr 21 10:56:56 2008 for UVES Pipeline Reference Manual by  doxygen 1.5.1