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
00079
00080
00084
00087 #ifdef HAVE_CONFIG_H
00088 # include <config.h>
00089 #endif
00090
00091
00092
00093
00094 #include <uves_physmod_qc1pmtbl.h>
00095
00096 #include <uves_error.h>
00097 #include <uves_msg.h>
00098 #include <string.h>
00099
00100
00101
00102 #define FILESIZE 200
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00123
00124 int uves_physmod_qc1pmtbl(cpl_table** rline_tbl,cpl_table** lin_tbl)
00125 {
00126
00127 int nCol = 0;
00128 int rlineRowNumber=0;
00129 int lineRowNo=0;
00130 int null=0;
00131 int i=0;
00132 int l=0;
00133
00134
00135 int selIdx=0;
00136
00137 char lineTbl[FILESIZE];
00138 char rLineTbl[FILESIZE];
00139 char aHeading[FILESIZE];
00140 char tmps[FILESIZE];
00141
00142
00143
00144 double xDif=0.0;
00145 double yDif=0.0;
00146 double xModReg=0.0;
00147 double yModReg=0.0;
00148 double xPred=0.0;
00149 double yPred=0.0;
00150 double x=0.0;
00151 double yNew=0.0;
00152 double diffX=0.0;
00153 double diffY=0.0;
00154
00155 double waveReg=0.0;
00156 double wavec=0.0;
00157 int match=1;
00158 int order=0;
00159 int orderReg=0;
00160
00161
00162
00163 memset(lineTbl, 0, FILESIZE);
00164 memset(rLineTbl, 0, FILESIZE);
00165 memset(aHeading, 0, FILESIZE);
00166 memset(tmps, 0, FILESIZE);
00167
00168
00169 uves_msg_debug("start %s",__func__);
00170
00171 check(nCol=cpl_table_get_ncol(*rline_tbl),"Error getting ncol");
00172 rlineRowNumber=cpl_table_get_nrow(*rline_tbl);
00173 uves_msg_debug("Opened table %s nCol=%d nrow=%d",
00174 "rline.tbl" ,nCol,rlineRowNumber);
00175
00176 nCol=cpl_table_get_ncol(*lin_tbl);
00177 lineRowNo=cpl_table_get_nrow(*lin_tbl);
00178
00179 uves_msg_debug("Opened table %s nCol=%d nrow=%d",
00180 lineTbl ,nCol,lineRowNo);
00181
00182
00183 if(cpl_table_has_column(*lin_tbl,"XDIF")){
00184 cpl_table_erase_column(*lin_tbl,"XDIF");
00185 uves_msg_debug("removed column XDIF");
00186 }
00187
00188 if(cpl_table_has_column(*lin_tbl,"YDIF")){
00189 cpl_table_erase_column(*lin_tbl,"YDIF");
00190 uves_msg_debug("removed column YDIF");
00191 }
00192
00193 if(cpl_table_has_column(*lin_tbl,"SELPLOT")){
00194 cpl_table_erase_column(*lin_tbl,"SELPLOT");
00195 uves_msg_debug("removed column SELPLOT");
00196 }
00197
00198 if(cpl_table_has_column(*lin_tbl,"XPRED")){
00199 cpl_table_erase_column(*lin_tbl,"XPRED");
00200 uves_msg_debug("removed column XPRED");
00201 }
00202
00203 if(cpl_table_has_column(*lin_tbl,"YPRED")){
00204 cpl_table_erase_column(*lin_tbl,"YPRED");
00205 uves_msg_debug("removed column YPRED");
00206 }
00207
00208
00209
00210 cpl_table_new_column(*lin_tbl,"XPRED",CPL_TYPE_DOUBLE);
00211 cpl_table_set_column_unit(*lin_tbl,"XPRED","pix");
00212
00213 cpl_table_new_column(*lin_tbl,"YPRED",CPL_TYPE_DOUBLE);
00214 cpl_table_set_column_unit(*lin_tbl,"YPRED","pix");
00215
00216 cpl_table_new_column(*lin_tbl,"XDIF",CPL_TYPE_DOUBLE);
00217 cpl_table_set_column_unit(*lin_tbl,"XDIF","pix");
00218
00219 cpl_table_new_column(*lin_tbl,"YDIF",CPL_TYPE_DOUBLE);
00220 cpl_table_set_column_unit(*lin_tbl,"YDIF","pix");
00221
00222 cpl_table_new_column(*lin_tbl,"SELPLOT",CPL_TYPE_INT);
00223 cpl_table_set_column_unit(*lin_tbl,"YDIF","pix");
00224
00225
00226
00227
00228
00229
00230
00231
00232 cpl_table_set_column_invalid(*lin_tbl,"SELPLOT",0,
00233 cpl_table_get_nrow(*lin_tbl));
00234
00235
00236
00237
00238
00239
00240
00241 for (l=0; l< rlineRowNumber; l++) {
00242
00243
00244 xModReg=cpl_table_get_double(*rline_tbl,"XMODREG",l,&null);
00245 yModReg=cpl_table_get_double(*rline_tbl,"YMODREG",l,&null);
00246 xDif=cpl_table_get_double(*rline_tbl,"XDIF",l,&null);
00247 yDif=cpl_table_get_double(*rline_tbl,"YDIF",l,&null);
00248 xPred=cpl_table_get_double(*rline_tbl,"XMOD",l,&null);
00249 yPred=cpl_table_get_double(*rline_tbl,"YMOD",l,&null);
00250 waveReg=cpl_table_get_double(*rline_tbl,"WAVE",l,&null);
00251 check_nomsg(orderReg=cpl_table_get_int(*rline_tbl,"ORDER",l,&null));
00252
00253
00254 selIdx = 1;
00255 match=0;
00256 for (i=0; i< lineRowNo; i++) {
00257
00258 x=cpl_table_get_double(*lin_tbl,"X",i,&null);
00259 yNew=cpl_table_get_double(*lin_tbl,"YNEW",i,&null);
00260 wavec=cpl_table_get_double(*lin_tbl,"WAVEC",i,&null);
00261 check_nomsg(order=cpl_table_get_int(*lin_tbl,"Order",i,&null));
00262 diffX=fabs(x-xModReg);
00263 diffY=fabs(yNew-yModReg);
00264
00265
00266
00267
00268 if ( (fabs(10.*waveReg - wavec) <= 0.01) &&
00269 match == 0 &&
00270 (fabs(orderReg-order)<0.1) ) {
00271
00272 cpl_table_set_double(*lin_tbl,"XPRED",i,xPred);
00273 cpl_table_set_double(*lin_tbl,"YPRED",i,yPred);
00274 cpl_table_set_double(*lin_tbl,"XDIF",i,xDif);
00275 cpl_table_set_double(*lin_tbl,"YDIF",i,yDif);
00276 }
00277 if ((diffX <= 0.001) && (diffY <= 0.001)) {
00278 match=1;
00279 cpl_table_set_double(*lin_tbl,"XPRED",i,xPred);
00280 cpl_table_set_double(*lin_tbl,"YPRED",i,yPred);
00281 cpl_table_set_double(*lin_tbl,"XDIF",i,xDif);
00282 cpl_table_set_double(*lin_tbl,"YDIF",i,yDif);
00283
00284 cpl_table_set_int(*lin_tbl,"SELPLOT",i,selIdx);
00285
00286 break;
00287 }
00288 }
00289 }
00290
00291
00292
00293
00294
00295 for (l=0; l< rlineRowNumber; l++) {
00296 xModReg=cpl_table_get_double(*rline_tbl,"XMODREG",l,&null);
00297 yModReg=cpl_table_get_double(*rline_tbl,"YMODREG",l,&null);
00298 xDif=cpl_table_get_double(*rline_tbl,"XDIF",l,&null);
00299 yDif=cpl_table_get_double(*rline_tbl,"YDIF",l,&null);
00300 xPred=cpl_table_get_double(*rline_tbl,"XMOD",l,&null);
00301 yPred=cpl_table_get_double(*rline_tbl,"YMOD",l,&null);
00302 waveReg=cpl_table_get_double(*rline_tbl,"WAVE",l,&null);
00303 check_nomsg(orderReg=cpl_table_get_int(*rline_tbl,"ORDER",l,&null));
00304
00305
00306 for (i=0; i< lineRowNo; i++) {
00307
00308 x=cpl_table_get_double(*lin_tbl,"X",i,&null);
00309 yNew=cpl_table_get_double(*lin_tbl,"YNEW",i,&null);
00310 wavec=cpl_table_get_double(*lin_tbl,"WAVEC",i,&null);
00311 check_nomsg(order=cpl_table_get_int(*lin_tbl,"Order",i,&null));
00312 check_nomsg(selIdx=cpl_table_get_int(*lin_tbl,"SELPLOT",i,&null));
00313 diffX=fabs(x-xModReg);
00314 diffY=fabs(yNew-yModReg);
00315
00316 if ( selIdx != 1 &&
00317 (fabs(orderReg-order)<0.1) ) {
00318 cpl_table_set_double(*lin_tbl,"XPRED",i,xPred);
00319 cpl_table_set_double(*lin_tbl,"YPRED",i,yPred);
00320 cpl_table_set_double(*lin_tbl,"XDIF",i,xDif);
00321 cpl_table_set_double(*lin_tbl,"YDIF",i,yDif);
00322 break;
00323 }
00324 }
00325 }
00326
00327
00328
00329
00330
00331
00332
00333 uves_msg_debug("end %s",__func__);
00334 cpl_table_fill_invalid_int(*lin_tbl,"SELPLOT",-1);
00335
00336 cleanup:
00337 return 0;
00338
00339 }