42 #include <uves_test_simulate.h>
44 #include <uves_utils_wrappers.h>
45 #include <uves_wavecal_utils.h>
46 #include <uves_error.h>
74 cpl_table **tracetable,
82 assure_nomsg(order_locations != NULL, CPL_ERROR_NULL_INPUT);
85 const char *data[] = {
"",
86 "'COEFFI','I*4',1,7,'7I10'",
89 "'COEFFR','R*4',1,5,'5E14.7'",
90 " 4.3300000E+02 4.0880000E+03 1.0000000E+00 2.1000000E+01 0.0000000E+00",
92 "'COEFFD','R*8',1,30,'3E23.15'",
93 " -7.097005629698889E+01 4.050908371864904E-02 -2.886756545398909E-06",
94 " 5.504345508879626E-10 -5.583004967206025E-14 7.624532125635992E+01",
95 " -2.428213567964009E-03 1.819158447566360E-06 -5.090366383338846E-10",
96 " 5.198098506055602E-14 3.513177145982783E-01 5.570332137951829E-04",
97 " -3.876157463910250E-07 1.113253735718822E-10 -1.132455173423791E-14",
98 " 2.977232589499959E-02 -5.389240622889887E-05 3.777456726044612E-08",
99 " -1.083863050648735E-11 1.098450510939580E-15 -1.093309039442914E-03",
100 " 2.402609262989674E-06 -1.688416547941747E-09 4.839101712729582E-13",
101 " -4.884504488944702E-17 1.919853952642526E-05 -4.004133160220927E-08",
102 " 2.816206503824200E-11 -8.051313882805877E-15 8.090579180112579E-19",
104 "'TAB_IN_OUT_YSHIFT','R*8',1,1,'3E23.15'",
105 " 4.180818583555659E+01 ",
111 for (i = 0; i <
sizeof(data)/
sizeof(
char *); i++)
113 uves_propertylist_append_string(header,
"HISTORY",
118 check_nomsg( *order_locations = uves_polynomial_convert_from_plist_midas(header,
123 if (ordertable != NULL)
128 *ordertable = cpl_table_new(5*(maxorder - minorder + 1));
129 cpl_table_new_column(*ordertable,
"Order", CPL_TYPE_INT);
130 cpl_table_new_column(*ordertable,
"X", CPL_TYPE_INT);
131 cpl_table_new_column(*ordertable,
"Yfit", CPL_TYPE_DOUBLE);
133 for (order = minorder; order <= maxorder; order++)
143 for (i = 0; i < 5; i++)
145 cpl_table_set_int(*ordertable,
"Order", row, order);
146 cpl_table_set_int(*ordertable,
"X", row, x[i]);
147 cpl_table_set_double(*ordertable,
"Yfit", row,
157 tracetable = tracetable;
160 uves_free_propertylist(&header);
190 cpl_table *ordertable = NULL;
191 cpl_table *tracetable = NULL;
192 const bool midas_format =
false;
194 const char *ORDER = midas_format ?
"ORDER" :
"Order";
195 const char *IDENT = midas_format ?
"IDENT" :
"Ident";
196 const char *YNEW = midas_format ?
"YNEW" :
"Ynew";
199 minorder, maxorder, nx);
205 *linetable = cpl_table_new(cpl_table_get_nrow(ordertable));
206 cpl_table_new_column(*linetable,
"X", CPL_TYPE_DOUBLE);
207 cpl_table_new_column(*linetable, YNEW, CPL_TYPE_DOUBLE);
208 cpl_table_new_column(*linetable,
"Y", CPL_TYPE_INT);
209 cpl_table_new_column(*linetable, ORDER, CPL_TYPE_INT);
210 cpl_table_new_column(*linetable, LINETAB_LAMBDAC, CPL_TYPE_DOUBLE);
211 cpl_table_new_column(*linetable, IDENT, CPL_TYPE_DOUBLE);
212 cpl_table_new_column(*linetable,
"Aux", CPL_TYPE_DOUBLE);
213 for (row = 0; row < cpl_table_get_nrow(ordertable); row++)
215 int order = cpl_table_get_int(ordertable,
"Order", row, NULL);
216 double x = cpl_table_get_int(ordertable,
"X", row, NULL);
217 double y = cpl_table_get_double(ordertable,
"Yfit", row, NULL);
219 double lambda = 3000 + 50*(order - minorder) + 80*(x*1.0/nx);
221 cpl_table_set_double(*linetable,
"X", row, x);
222 cpl_table_set_double(*linetable, YNEW, row, y);
223 cpl_table_set_int(*linetable,
"Y", row, order);
224 cpl_table_set_int(*linetable, ORDER, row, m);
225 cpl_table_set_double(*linetable, LINETAB_LAMBDAC, row, lambda);
226 cpl_table_set_double(*linetable, IDENT, row, lambda);
227 cpl_table_set_double(*linetable,
"Aux", row, lambda*m);
231 if (abs_orders != NULL)
239 "X", YNEW, ORDER, NULL,
244 if (firstabs != NULL) {
249 *firstabs = uves_round_double(
252 if (lastabs != NULL) {
257 *lastabs = uves_round_double(
263 if (dispersion != NULL)
271 "X", ORDER,
"Aux", NULL,
280 uves_free_table(&ordertable);
281 uves_free_table(&tracetable);
void uves_polynomial_delete(polynomial **p)
Delete a polynomial.
void create_order_table(cpl_table **ordertable, polynomial **order_locations, cpl_table **tracetable, int minorder, int maxorder, int nx)
Create order table.
uves_propertylist * uves_propertylist_new(void)
Create an empty property list.
polynomial * uves_polynomial_regression_2d(cpl_table *t, const char *X1, const char *X2, const char *Y, const char *sigmaY, int degree1, int degree2, const char *polynomial_fit, const char *residual_square, const char *variance_fit, double *mse, double *red_chisq, polynomial **variance, double kappa, double min_reject)
Fit a 2d polynomial to three table columns.
double uves_polynomial_evaluate_2d(const polynomial *p, double x1, double x2)
Evaluate a 2d polynomial.
#define assure_nomsg(BOOL, CODE)
void create_line_table(cpl_table **linetable, polynomial **dispersion, polynomial **abs_orders, int *firstabs, int *lastabs, int minorder, int maxorder, int nx)
Create line table.