37 #include <uves_physmod_calmap.h>
39 #include <uves_physmod_regress_echelle.h>
40 #include <uves_wavecal_utils.h>
41 #include <uves_utils_wrappers.h>
43 #include <uves_error.h>
70 const char *recipe_id,
71 const cpl_parameterlist* parameters,
72 cpl_table* npline_tbl,
90 double mean_err_aux=0;
91 double mean_err_order=0;
101 check(uves_get_parameter(parameters,NULL,recipe_id,
"kappa",CPL_TYPE_DOUBLE,&kappa),
102 "Could not read parameter");
103 check(uves_get_parameter(parameters,NULL,recipe_id,
"tol",CPL_TYPE_DOUBLE,&tol),
104 "Could not read parameter");
106 cpl_table_erase_invalid_rows(npline_tbl);
107 uves_msg_debug(
"nraw=%" CPL_SIZE_FORMAT
"",cpl_table_get_nrow(npline_tbl));
108 *ord_tbl=cpl_table_new(cpl_table_get_nrow(npline_tbl));
110 cpl_table_duplicate_column(*ord_tbl,
"ABS_ORDER",npline_tbl,
"ORDER");
111 cpl_table_duplicate_column(*ord_tbl,
"ORDER",npline_tbl,
"ORDER");
112 cpl_table_duplicate_column(*ord_tbl,
"X",npline_tbl,
"XMOD");
113 cpl_table_duplicate_column(*ord_tbl,
"Y",npline_tbl,
"YMOD");
120 rel_ord = cpl_table_get_column_max(*ord_tbl,
"ORDER");
123 cpl_table_multiply_scalar(*ord_tbl,
"ORDER",-1);
124 cpl_table_add_scalar(*ord_tbl,
"ORDER",rel_ord);
125 cpl_table_add_scalar(*ord_tbl,
"ORDER",+1);
129 uves_propertylist_append_bool(plist,
"ORDER",0);
130 uves_propertylist_append_bool(plist,
"X",0);
131 uves_table_sort(*ord_tbl,plist);
132 uves_free_propertylist(&plist);
133 *abs_ord_min=cpl_table_get_column_min(*ord_tbl,
"ORDER");
134 *abs_ord_max=cpl_table_get_column_max(*ord_tbl,
"ORDER");
136 ord_ech=*abs_ord_max-*abs_ord_min+1;
138 *abs_ord_max,*abs_ord_min,(*abs_ord_max-*abs_ord_min+1));
143 recipe_id,parameters,
144 ord_tbl,num_outliers,
145 tol, kappa,s_tbl,w_tbl);
152 uves_free_table(lin_tbl);
153 *lin_tbl=cpl_table_new(cpl_table_get_nrow(npline_tbl));
156 cpl_table_duplicate_column(*lin_tbl,
"X",npline_tbl,
"XMOD");
157 cpl_table_duplicate_column(*lin_tbl,
"Y",npline_tbl,
"ORDER");
158 cpl_table_duplicate_column(*lin_tbl,
"PEAK",npline_tbl,
"ORDER");
159 cpl_table_duplicate_column(*lin_tbl,
"Ident",npline_tbl,
"IDENT");
160 cpl_table_duplicate_column(*lin_tbl,
"YNEW",npline_tbl,
"YMOD");
161 cpl_table_duplicate_column(*lin_tbl,
"Order",npline_tbl,
"ORDER");
162 cpl_table_duplicate_column(*lin_tbl,
"WAVEC",npline_tbl,
"IDENT");
164 cpl_table_duplicate_column(*lin_tbl,
"AUX",npline_tbl,
"ORDER");
165 cpl_table_cast_column(*lin_tbl,
"AUX",
"Aux",CPL_TYPE_DOUBLE);
166 cpl_table_multiply_columns(*lin_tbl,
"Aux",
"Ident");
167 cpl_table_erase_column(*lin_tbl,
"AUX");
169 cpl_table_set_column_unit(*lin_tbl,
"WAVEC",
"Ang");
170 cpl_table_set_column_unit(*lin_tbl,
"YNEW",
"pix");
171 cpl_table_set_column_unit(*lin_tbl,
"Ident",
"Ang");
180 "Fitting YDIF failed");
182 cpl_table_set_column_unit(*lin_tbl,
"XREG",
"pix");
183 cpl_table_set_column_unit(*lin_tbl,
"X",
"pix");
191 ord_min=cpl_table_get_column_min(*lin_tbl,
"Order");
192 ord_max=cpl_table_get_column_max(*lin_tbl,
"Order");
195 outputd[0],outputd[1],outputd[2]);
199 cpl_table_duplicate_column(*lin_tbl,LINETAB_PIXELSIZE,*lin_tbl,
"X");
200 cpl_table_multiply_scalar(*lin_tbl,LINETAB_PIXELSIZE,2*outputd[2]);
201 cpl_table_add_scalar(*lin_tbl,LINETAB_PIXELSIZE,outputd[1]);
202 cpl_table_divide_columns(*lin_tbl,LINETAB_PIXELSIZE,
"Order");
205 dis_avg=cpl_table_get_column_mean(*lin_tbl,LINETAB_PIXELSIZE);
206 uves_msg(
"Average pixel size: %f wav. units",dis_avg);
210 NULL,4,4,
"RORD",NULL,NULL,
211 &mean_err_order,NULL,NULL,-1,-1),
212 "Fitting Order failed");
236 uves_msg_debug(
"Line Table: ncol=%" CPL_SIZE_FORMAT
"",cpl_table_get_ncol(*lin_tbl));
238 uves_free_propertylist(&plist);
void uves_polynomial_delete(polynomial **p)
Delete a polynomial.
uves_propertylist * uves_propertylist_new(void)
Create an empty property list.
#define uves_msg(...)
Print a message on 'info' or 'debug' level.
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_get_coeff_1d(const polynomial *p, int degree)
Get a coefficient of a 1D polynomial.
polynomial * uves_polynomial_regression_1d(cpl_table *t, const char *X, const char *Y, const char *sigmaY, int degree, const char *polynomial_fit, const char *residual_square, double *mean_squared_error, double kappa)
Fit a 1d polynomial to two table columns.
#define uves_msg_debug(...)
Print a debug message.
int uves_physmod_regress_echelle(const uves_propertylist *raw_header, enum uves_chip chip, const char *recipe_id, const cpl_parameterlist *parameters, cpl_table **o_tbl, int num_outliers, double tol, double kappa, cpl_table **s_tbl, cpl_table **w_tbl)
Fit mesured position of orders by a bivariate polynomial.
int uves_physmod_calmap(const uves_propertylist *raw_header, enum uves_chip chip, const char *recipe_id, const cpl_parameterlist *parameters, cpl_table *npline_tbl, cpl_table **ord_tbl, cpl_table **lin_tbl, cpl_table **w_tbl, cpl_table **s_tbl, int *abs_ord_min, int *abs_ord_max, polynomial **poly2d)
This procedure makes the order definitions and wavelength calibration from the wavelength projection ...