00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00082
00084 #ifdef HAVE_CONFIG_H
00085 # include <config.h>
00086 #endif
00087
00088
00089
00090
00091
00092 #include <uves_physmod_stability_check.h>
00093 #include <uves_utils_wrappers.h>
00094 #include <uves_msg.h>
00095 #include <uves_error.h>
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00127
00128
00129 int uves_physmod_stability_check(cpl_table* m_tbl,
00130 cpl_table* r_tbl,
00131 double* med_dx,
00132 double* med_dy,
00133 double* avg_dx,
00134 double* avg_dy)
00135
00136 {
00137
00138
00139 cpl_table* tmp_tbl1=NULL;
00140 cpl_table* tmp_tbl2=NULL;
00141 cpl_table* tmp_tbl3=NULL;
00142 cpl_table* tmp_tbl4=NULL;
00143 cpl_table* tmp_tbl5=NULL;
00144 int msz=0;
00145 int rsz=0;
00146 int ref=0;
00147 int status=0;
00148
00149 check_nomsg(cpl_table_duplicate_column(m_tbl,"X",m_tbl,"XMES"));
00150 check_nomsg(cpl_table_duplicate_column(m_tbl,"Y",m_tbl,"YMES"));
00151 check_nomsg(cpl_table_duplicate_column(m_tbl,"S",m_tbl,"STATUS"));
00152 check_nomsg(cpl_table_duplicate_column(m_tbl,"O",m_tbl,"ORDER"));
00153 check_nomsg(cpl_table_duplicate_column(m_tbl,"ID",m_tbl,"IDENT"));
00154
00155 check_nomsg(cpl_table_duplicate_column(r_tbl,"X",r_tbl,"XMES"));
00156 check_nomsg(cpl_table_duplicate_column(r_tbl,"Y",r_tbl,"YMES"));
00157 check_nomsg(cpl_table_duplicate_column(r_tbl,"S",r_tbl,"STATUS"));
00158 check_nomsg(cpl_table_duplicate_column(r_tbl,"O",r_tbl,"ORDER"));
00159 check_nomsg(cpl_table_duplicate_column(r_tbl,"ID",r_tbl,"IDENT"));
00160
00161 check_nomsg(msz=cpl_table_get_nrow(m_tbl));
00162 check_nomsg(rsz=cpl_table_get_nrow(r_tbl));
00163
00164 if(msz > rsz) {
00165 check_nomsg(cpl_table_set_size(r_tbl,msz));
00166 uves_msg_warning("Actual and reference tables has different sizes");
00167 } else if (msz < rsz) {
00168 check_nomsg(cpl_table_set_size(m_tbl,rsz));
00169 uves_msg_warning("Actual and reference tables has different sizes");
00170 }
00171
00172 check_nomsg(cpl_table_duplicate_column(r_tbl,"Xm",m_tbl,"X"));
00173 check_nomsg(cpl_table_duplicate_column(r_tbl,"Ym",m_tbl,"Y"));
00174 check_nomsg(cpl_table_duplicate_column(r_tbl,"Sm",m_tbl,"S"));
00175 check_nomsg(cpl_table_duplicate_column(r_tbl,"Om",m_tbl,"O"));
00176 check_nomsg(cpl_table_duplicate_column(r_tbl,"IDm",m_tbl,"ID"));
00177 check_nomsg(cpl_table_duplicate_column(r_tbl,"WAVEm",m_tbl,"WAVE"));
00178
00179
00180 check_nomsg(cpl_table_duplicate_column(r_tbl,"DX",r_tbl,"Xm"));
00181 check_nomsg(cpl_table_duplicate_column(r_tbl,"DY",r_tbl,"Ym"));
00182 check_nomsg(cpl_table_duplicate_column(r_tbl,"DO",r_tbl,"Om"));
00183 check_nomsg(cpl_table_duplicate_column(r_tbl,"DID",r_tbl,"IDm"));
00184 check_nomsg(cpl_table_duplicate_column(r_tbl,"DW",r_tbl,"WAVEm"));
00185
00186
00187 check_nomsg(cpl_table_subtract_columns(r_tbl,"DX","X"));
00188 check_nomsg(cpl_table_subtract_columns(r_tbl,"DY","Y"));
00189 check_nomsg(cpl_table_subtract_columns(r_tbl,"DO","O"));
00190 check_nomsg(cpl_table_subtract_columns(r_tbl,"DID","ID"));
00191 check_nomsg(cpl_table_subtract_columns(r_tbl,"DW","WAVE"));
00192
00193
00194 check(cpl_table_power_column(r_tbl,"DW",2.),"Error computing power column");
00195 check(cpl_table_power_column(r_tbl,"DW",0.5),"Error computing power column");
00196
00197
00198 check(tmp_tbl1=uves_extract_table_rows(r_tbl,"DO",CPL_EQUAL_TO,
00199 0),"Error selecting DO");
00200 check(tmp_tbl2=uves_extract_table_rows(tmp_tbl1,"DW",CPL_LESS_THAN,
00201 0.001),"Error selecting DW");
00202 check(tmp_tbl3=uves_extract_table_rows(tmp_tbl2,"DID",CPL_LESS_THAN,
00203 0.001),"Error selecting DID");
00204 check(tmp_tbl4=uves_extract_table_rows(tmp_tbl3,"S",CPL_EQUAL_TO,
00205 0),"Error selecting S");
00206 check(tmp_tbl5=uves_extract_table_rows(tmp_tbl4,"Sm",CPL_EQUAL_TO,
00207 0),"Error selecting Sm");
00208 check_nomsg(ref=cpl_table_get_nrow(tmp_tbl5)/2);
00209
00210 check_nomsg(*med_dx=cpl_table_get_column_median(tmp_tbl5,"DX"));
00211 check_nomsg(*med_dy=cpl_table_get_column_median(tmp_tbl5,"DY"));
00212 check_nomsg(*avg_dx=cpl_table_get_column_mean(tmp_tbl5,"DX"));
00213 check_nomsg(*avg_dy=cpl_table_get_column_mean(tmp_tbl5,"DY"));
00214
00215
00216
00217
00218 uves_msg("Stability check results: Mean DX = %5.3f Mean DY = %5.3f",
00219 *avg_dx,*avg_dy);
00220 check_nomsg(uves_sort_table_1(tmp_tbl5,"DX",0));
00221 check_nomsg(*med_dx=cpl_table_get_double(tmp_tbl5,"DX",ref,&status));
00222 check_nomsg(uves_sort_table_1(tmp_tbl5,"DY",0));
00223 check_nomsg(*med_dy=cpl_table_get_double(tmp_tbl5,"DY",ref,&status));
00224
00225 uves_msg("Stability check results: Median DX = %5.3f Median DY = %5.3f",
00226 *med_dx,*med_dy);
00227
00228 cleanup:
00229 uves_free_table(&tmp_tbl1);
00230 uves_free_table(&tmp_tbl2);
00231 uves_free_table(&tmp_tbl3);
00232 uves_free_table(&tmp_tbl4);
00233 uves_free_table(&tmp_tbl5);
00234
00235 return 0;
00236
00237
00238 }