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

Generated on 8 Mar 2011 for UVES Pipeline Reference Manual by  doxygen 1.6.1