00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef MUSE_WAVECALIB_H
00023 #define MUSE_WAVECALIB_H
00024
00025
00026
00027
00028 #include <cpl.h>
00029
00030 #include "muse_image.h"
00031 #include "muse_imagelist.h"
00032
00033
00034
00035
00036
00040
00044
00045
00046 typedef enum {
00047 MUSE_WAVE_WEIGHTING_UNIFORM = 0,
00048 MUSE_WAVE_WEIGHTING_CERR,
00049 MUSE_WAVE_WEIGHTING_SCATTER,
00050 MUSE_WAVE_WEIGHTING_CERRSCATTER
00052 } muse_wave_weighting_type;
00053
00054
00058
00059 typedef struct {
00061 unsigned short xorder;
00063 unsigned short yorder;
00066 double detsigma;
00068 double ddisp;
00071 double tolerance;
00074 double linesigma;
00076 cpl_boolean rflag;
00079 cpl_table *residuals;
00083 double fitsigma;
00085 double targetrms;
00088 muse_wave_weighting_type fitweighting;
00089 } muse_wave_params;
00090
00093
00094
00095
00096 muse_wave_params *muse_wave_params_new(void);
00097 void muse_wave_params_delete(muse_wave_params *);
00098
00099 cpl_table *muse_wave_calib(muse_image *, cpl_table *, cpl_table *, muse_wave_params *);
00100 cpl_table *muse_wave_calib_lampwise(muse_imagelist *, cpl_table *, cpl_table *, muse_wave_params *);
00101
00102 cpl_boolean muse_wave_lines_check(cpl_table *, cpl_propertylist *);
00103 cpl_vector *muse_wave_lines_get(cpl_table *, int, double);
00104 cpl_vector *muse_wave_lines_get_for_lamp(cpl_table *, const char *, int, double);
00105 const char *muse_wave_lines_get_lampname(cpl_table *, const int);
00106 cpl_table *muse_wave_lines_search(muse_image *, double, const unsigned short, const unsigned char);
00107 cpl_error_code muse_wave_lines_identify(cpl_table *, cpl_vector *, const muse_wave_params *);
00108
00109 cpl_table *muse_wave_line_handle_singlet(muse_image *, cpl_table *, unsigned int, cpl_polynomial *, cpl_polynomial **, const muse_wave_params *, const unsigned short, int);
00110 cpl_table *muse_wave_line_handle_multiplet(muse_image *, cpl_table *, unsigned int, cpl_polynomial *, cpl_polynomial **, const muse_wave_params *, const unsigned short, int);
00111 cpl_error_code muse_wave_line_fit_single(muse_image *, int, double, int, double, cpl_table *, int);
00112 cpl_error_code muse_wave_line_fit_multiple(muse_image *, int, cpl_bivector *, cpl_vector *, int, double, cpl_table *, int);
00113 cpl_error_code muse_wave_line_fit_iterate(cpl_table *, double, const muse_wave_params *aParams);
00114
00115 cpl_error_code muse_wave_poly_fit(cpl_matrix *, cpl_vector *, cpl_vector *, cpl_polynomial **, double *, muse_wave_params *, const unsigned short);
00116
00117 cpl_table *muse_wave_table_create(const unsigned short, const unsigned short, const unsigned short);
00118 cpl_error_code muse_wave_table_add_poly(cpl_table *, cpl_polynomial *, double, unsigned short, unsigned short, const unsigned short);
00119 cpl_error_code muse_wave_table_get_orders(const cpl_table *, unsigned short *, unsigned short *);
00120 cpl_polynomial *muse_wave_table_get_poly_for_slice(const cpl_table *, unsigned short);
00121
00122 cpl_image *muse_wave_map(muse_image *, const cpl_table *, const cpl_table *);
00123
00124 cpl_error_code muse_wave_plot_residuals(cpl_table *, unsigned char, unsigned short, unsigned int, cpl_boolean, cpl_vector *);
00125 cpl_error_code muse_wave_plot_column(cpl_table *, cpl_table *, unsigned char, unsigned short, unsigned int, unsigned int, cpl_boolean);
00126
00127 #endif