80 #include <uves_test_simulate.h>
82 #include <uves_utils_wrappers.h>
83 #include <uves_wavecal_utils.h>
84 #include <uves_error.h>
112 cpl_table **tracetable,
120 assure_nomsg(order_locations != NULL, CPL_ERROR_NULL_INPUT);
123 const char *data[] = {
"",
124 "'COEFFI','I*4',1,7,'7I10'",
125 " 53889 2 3 2 1 4 5",
127 "'COEFFR','R*4',1,5,'5E14.7'",
128 " 4.3300000E+02 4.0880000E+03 1.0000000E+00 2.1000000E+01 0.0000000E+00",
130 "'COEFFD','R*8',1,30,'3E23.15'",
131 " -7.097005629698889E+01 4.050908371864904E-02 -2.886756545398909E-06",
132 " 5.504345508879626E-10 -5.583004967206025E-14 7.624532125635992E+01",
133 " -2.428213567964009E-03 1.819158447566360E-06 -5.090366383338846E-10",
134 " 5.198098506055602E-14 3.513177145982783E-01 5.570332137951829E-04",
135 " -3.876157463910250E-07 1.113253735718822E-10 -1.132455173423791E-14",
136 " 2.977232589499959E-02 -5.389240622889887E-05 3.777456726044612E-08",
137 " -1.083863050648735E-11 1.098450510939580E-15 -1.093309039442914E-03",
138 " 2.402609262989674E-06 -1.688416547941747E-09 4.839101712729582E-13",
139 " -4.884504488944702E-17 1.919853952642526E-05 -4.004133160220927E-08",
140 " 2.816206503824200E-11 -8.051313882805877E-15 8.090579180112579E-19",
142 "'TAB_IN_OUT_YSHIFT','R*8',1,1,'3E23.15'",
143 " 4.180818583555659E+01 ",
149 for (i = 0; i <
sizeof(data)/
sizeof(
char *); i++)
151 uves_propertylist_append_string(header,
"HISTORY",
156 check_nomsg( *order_locations = uves_polynomial_convert_from_plist_midas(header,
161 if (ordertable != NULL)
166 *ordertable = cpl_table_new(5*(maxorder - minorder + 1));
167 cpl_table_new_column(*ordertable,
"Order", CPL_TYPE_INT);
168 cpl_table_new_column(*ordertable,
"X", CPL_TYPE_INT);
169 cpl_table_new_column(*ordertable,
"Yfit", CPL_TYPE_DOUBLE);
171 for (order = minorder; order <= maxorder; order++)
181 for (i = 0; i < 5; i++)
183 cpl_table_set_int(*ordertable,
"Order", row, order);
184 cpl_table_set_int(*ordertable,
"X", row, x[i]);
185 cpl_table_set_double(*ordertable,
"Yfit", row,
195 tracetable = tracetable;
198 uves_free_propertylist(&header);
228 cpl_table *ordertable = NULL;
229 cpl_table *tracetable = NULL;
230 const bool midas_format =
false;
232 const char *ORDER = midas_format ?
"ORDER" :
"Order";
233 const char *IDENT = midas_format ?
"IDENT" :
"Ident";
234 const char *YNEW = midas_format ?
"YNEW" :
"Ynew";
237 minorder, maxorder, nx);
243 *linetable = cpl_table_new(cpl_table_get_nrow(ordertable));
244 cpl_table_new_column(*linetable,
"X", CPL_TYPE_DOUBLE);
245 cpl_table_new_column(*linetable, YNEW, CPL_TYPE_DOUBLE);
246 cpl_table_new_column(*linetable,
"Y", CPL_TYPE_INT);
247 cpl_table_new_column(*linetable, ORDER, CPL_TYPE_INT);
248 cpl_table_new_column(*linetable, LINETAB_LAMBDAC, CPL_TYPE_DOUBLE);
249 cpl_table_new_column(*linetable, IDENT, CPL_TYPE_DOUBLE);
250 cpl_table_new_column(*linetable,
"Aux", CPL_TYPE_DOUBLE);
251 for (row = 0; row < cpl_table_get_nrow(ordertable); row++)
253 int order = cpl_table_get_int(ordertable,
"Order", row, NULL);
254 double x = cpl_table_get_int(ordertable,
"X", row, NULL);
255 double y = cpl_table_get_double(ordertable,
"Yfit", row, NULL);
257 double lambda = 3000 + 50*(order - minorder) + 80*(x*1.0/nx);
259 cpl_table_set_double(*linetable,
"X", row, x);
260 cpl_table_set_double(*linetable, YNEW, row, y);
261 cpl_table_set_int(*linetable,
"Y", row, order);
262 cpl_table_set_int(*linetable, ORDER, row, m);
263 cpl_table_set_double(*linetable, LINETAB_LAMBDAC, row, lambda);
264 cpl_table_set_double(*linetable, IDENT, row, lambda);
265 cpl_table_set_double(*linetable,
"Aux", row, lambda*m);
269 if (abs_orders != NULL)
277 "X", YNEW, ORDER, NULL,
282 if (firstabs != NULL) {
287 *firstabs = uves_round_double(
290 if (lastabs != NULL) {
295 *lastabs = uves_round_double(
301 if (dispersion != NULL)
309 "X", ORDER,
"Aux", NULL,
318 uves_free_table(&ordertable);
319 uves_free_table(&tracetable);