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 #ifdef HAVE_CONFIG_H
00051 # include <config.h>
00052 #endif
00053
00054 #include <uves_wavecal_identify.h>
00055 #include <uves_wavecal_utils.h>
00056 #include <uves_utils_wrappers.h>
00057 #include <uves_error.h>
00058 #include <irplib_test.h>
00059
00060 #include <cpl.h>
00061 #include <math.h>
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00075
00078
00082
00083 static void
00084 test_ppm(void)
00085 {
00086 int nlines = 50;
00087 int minorder = 94;
00088 int maxorder = 97;
00089 const int norders = maxorder - minorder + 1;
00090 int i, order;
00091
00092 cpl_table *linetable = cpl_table_new(norders * nlines);
00093 cpl_table *line_refer = cpl_table_new(nlines);
00094
00095 cpl_table_new_column(line_refer, "Wave", CPL_TYPE_DOUBLE);
00096
00097 for (i = 0; i < nlines; i++)
00098 {
00099 cpl_table_set_double(line_refer, "Wave", i, 1000 + 500*sin(i));
00100 }
00101
00102 irplib_test_eq( cpl_error_get_code(), CPL_ERROR_NONE );
00103
00104 cpl_table_new_column(linetable, "X" , CPL_TYPE_DOUBLE);
00105 cpl_table_new_column(linetable, "Order" , CPL_TYPE_INT);
00106 cpl_table_new_column(linetable, LINETAB_LAMBDAC , CPL_TYPE_DOUBLE);
00107 cpl_table_new_column(linetable, LINETAB_PIXELSIZE, CPL_TYPE_DOUBLE);
00108
00109 for (order = minorder; order <= maxorder; order++)
00110 {
00111 for (i = 0; i < nlines; i++)
00112 {
00113 int row = (order-minorder)*nlines + i;
00114
00115 cpl_table_set_int(linetable, "Order", row,
00116 order);
00117
00118 cpl_table_set_double(linetable, LINETAB_PIXELSIZE, row, 1);
00119
00120
00121 cpl_table_set_double(linetable, "X", row,
00122 cpl_table_get_double(line_refer, "Wave", i, NULL));
00123
00124 cpl_table_set_double(linetable, LINETAB_LAMBDAC, row,
00125 cpl_table_get_double(line_refer, "Wave", i, NULL));
00126 }
00127 }
00128
00129 irplib_test_eq( cpl_error_get_code(), CPL_ERROR_NONE );
00130
00131
00132
00133
00134
00135
00136
00137 uves_wavecal_identify_lines_ppm(linetable,
00138 line_refer);
00139
00140 irplib_test( cpl_table_has_column(linetable, "Ident_ppm") );
00141
00142 uves_free_table(&linetable);
00143 uves_free_table(&line_refer);
00144
00145 return;
00146 }
00147
00148
00149
00153
00154
00155 int main(void)
00156 {
00157 IRPLIB_TEST_INIT;
00158 #if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 0, 0)
00159 cpl_errorstate initial_errorstate = cpl_errorstate_get();
00160 #endif
00161 test_ppm();
00162
00163 if (cpl_error_get_code() != CPL_ERROR_NONE)
00164 {
00165 #if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 0, 0)
00166 cpl_errorstate_dump(initial_errorstate,CPL_FALSE,NULL);
00167 #else
00168 uves_error_dump();
00169 #endif
00170 }
00171 IRPLIB_TEST_END;
00172 }
00173
00174