34#include "cr2res_dfs.h"
36#include "cr2res_utils.h"
59 if (set == NULL)
return CPL_ERROR_NULL_INPUT ;
62 nframes = cpl_frameset_get_size(set) ;
65 for (i = 0 ; i < nframes ; i++) {
68 frame = cpl_frameset_get_position(set, i);
69 tag = cpl_frame_get_tag(frame);
72 cpl_msg_warning(cpl_func,
"Frame %d has no tag", i);
74 }
else if (!strcmp(tag, CR2RES_DETLIN_DARK_RAW) ||
75 !strcmp(tag, CR2RES_DETLIN_LAMP_RAW) ||
76 !strcmp(tag, CR2RES_DARK_RAW) ||
77 !strcmp(tag, CR2RES_FLAT_RAW) ||
78 !strcmp(tag, CR2RES_WAVE_UNE_RAW) ||
79 !strcmp(tag, CR2RES_WAVE_FPET_RAW) ||
80 !strcmp(tag, CR2RES_METROLOGY_RAW) ||
81 !strcmp(tag, CR2RES_CAL_NODDING_OTHER_RAW) ||
82 !strcmp(tag, CR2RES_CAL_NODDING_JITTER_RAW) ||
83 !strcmp(tag, CR2RES_OBS_NODDING_OTHER_RAW) ||
84 !strcmp(tag, CR2RES_OBS_NODDING_JITTER_RAW) ||
85 !strcmp(tag, CR2RES_OBS_ASTROMETRY_OTHER_RAW) ||
86 !strcmp(tag, CR2RES_OBS_ASTROMETRY_JITTER_RAW) ||
87 !strcmp(tag, CR2RES_OBS_STARING_OTHER_RAW) ||
88 !strcmp(tag, CR2RES_OBS_STARING_JITTER_RAW) ||
89 !strcmp(tag, CR2RES_OBS_STARING_WAVE_SKY_RAW) ||
90 !strcmp(tag, CR2RES_OBS_POLARIMETRY_OTHER_RAW) ||
91 !strcmp(tag, CR2RES_OBS_2D_OBJECT_RAW) ||
92 !strcmp(tag, CR2RES_OBS_2D_SKY_RAW) ||
95 !strcmp(tag, CR2RES_BPM_DRSTYPE) ||
99 !strcmp(tag, CR2RES_CALIBRATED_DRSTYPE) ||
101 !strcmp(tag, CR2RES_EXTRACT_1D_DRSTYPE) ||
104 !strcmp(tag, CR2RES_TW_DRSTYPE)) {
106 cpl_frame_set_group(frame, CPL_FRAME_GROUP_RAW);
107 }
else if (!strcmp(tag, CR2RES_EMISSION_LINES_TXT_RAW) ||
108 !strcmp(tag, CR2RES_LINES_SELECTION_TXT_RAW) ||
109 !strcmp(tag, CR2RES_PHOTO_FLUX_TXT_RAW) ||
113 !strcmp(tag, CR2RES_CAL_DETLIN_COEFFS_PROCATG) ||
114 !strcmp(tag, CR2RES_CAL_DETLIN_BPM_PROCATG) ||
116 !strcmp(tag, CR2RES_CAL_DARK_MASTER_PROCATG) ||
117 !strcmp(tag, CR2RES_CAL_DARK_BPM_PROCATG) ||
119 !strcmp(tag, CR2RES_CAL_FLAT_BPM_PROCATG) ||
120 !strcmp(tag, CR2RES_CAL_FLAT_EXTRACT_1D_PROCATG) ||
121 !strcmp(tag, CR2RES_CAL_FLAT_SLIT_MODEL_PROCATG) ||
122 !strcmp(tag, CR2RES_CAL_FLAT_SLIT_FUNC_PROCATG) ||
123 !strcmp(tag, CR2RES_CAL_FLAT_TW_PROCATG) ||
124 !strcmp(tag, CR2RES_CAL_FLAT_TW_MERGED_PROCATG) ||
125 !strcmp(tag, CR2RES_CAL_FLAT_MASTER_PROCATG) ||
127 !strcmp(tag, CR2RES_CAL_WAVE_TW_PROCATG) ||
128 !strcmp(tag, CR2RES_CAL_WAVE_MAP_PROCATG) ||
129 !strcmp(tag, CR2RES_CAL_WAVE_LINES_DIAGNOSTICS_PROCATG) ||
130 !strcmp(tag, CR2RES_CAL_WAVE_EXTRACT_1D_PROCATG) ||
132 !strcmp(tag, CR2RES_OBS_NODDING_EXTRACTA_PROCATG) ||
133 !strcmp(tag, CR2RES_OBS_NODDING_COMBINEDA_PROCATG) ||
134 !strcmp(tag, CR2RES_OBS_NODDING_SLITFUNCA_PROCATG) ||
135 !strcmp(tag, CR2RES_OBS_NODDING_SLITMODELA_PROCATG) ||
136 !strcmp(tag, CR2RES_OBS_NODDING_TWA_PROCATG) ||
137 !strcmp(tag, CR2RES_OBS_NODDING_EXTRACTB_PROCATG) ||
138 !strcmp(tag, CR2RES_OBS_NODDING_COMBINEDB_PROCATG) ||
139 !strcmp(tag, CR2RES_OBS_NODDING_SLITFUNCB_PROCATG) ||
140 !strcmp(tag, CR2RES_OBS_NODDING_SLITMODELB_PROCATG) ||
141 !strcmp(tag, CR2RES_OBS_NODDING_TWB_PROCATG) ||
142 !strcmp(tag, CR2RES_OBS_NODDING_EXTRACTC_PROCATG) ||
143 !strcmp(tag, CR2RES_OBS_NODDING_THROUGHPUT_PROCATG) ||
145 !strcmp(tag, CR2RES_OBS_STARING_COMBINED_PROCATG) ||
146 !strcmp(tag, CR2RES_OBS_STARING_EXTRACT_PROCATG) ||
147 !strcmp(tag, CR2RES_OBS_STARING_SLITFUNC_PROCATG) ||
148 !strcmp(tag, CR2RES_OBS_STARING_SLITMODEL_PROCATG) ||
150 !strcmp(tag, CR2RES_OBS_2D_EXTRACT_PROCATG) ||
151 !strcmp(tag, CR2RES_OBS_2D_CALIBRATED_PROCATG) ||
153 !strcmp(tag, CR2RES_OBS_POL_EXTRACTA_PROCATG) ||
154 !strcmp(tag, CR2RES_OBS_POL_TWA_PROCATG) ||
155 !strcmp(tag, CR2RES_OBS_POL_SPECA_PROCATG) ||
156 !strcmp(tag, CR2RES_OBS_POL_EXTRACTB_PROCATG) ||
157 !strcmp(tag, CR2RES_OBS_POL_TWB_PROCATG) ||
158 !strcmp(tag, CR2RES_OBS_POL_SPECB_PROCATG) ||
159 !strcmp(tag, CR2RES_OBS_POL_CALIB_A_PROCATG) ||
160 !strcmp(tag, CR2RES_OBS_POL_CALIB_B_PROCATG) ||
162 !strcmp(tag, CR2RES_EMISSION_LINES_PROCATG) ||
164 !strcmp(tag, CR2RES_PHOTO_FLUX_PROCATG) ||
166 !strcmp(tag, CR2RES_UTIL_CALIB_PROCATG) ||
168 !strcmp(tag, CR2RES_UTIL_BPM_MERGE_PROCATG) ||
170 !strcmp(tag, CR2RES_UTIL_BPM_SPLIT_PROCATG) ||
172 !strcmp(tag, CR2RES_UTIL_TRACE_TW_PROCATG) ||
174 !strcmp(tag, CR2RES_UTIL_SLIT_FUNC_PROCATG) ||
175 !strcmp(tag, CR2RES_UTIL_SLIT_MODEL_PROCATG) ||
176 !strcmp(tag, CR2RES_UTIL_EXTRACT_1D_PROCATG) ||
178 !strcmp(tag, CR2RES_UTIL_MASTER_FLAT_PROCATG) ||
179 !strcmp(tag, CR2RES_UTIL_NORM_BPM_PROCATG) ||
181 !strcmp(tag, CR2RES_UTIL_SLIT_CURV_MAP_PROCATG) ||
182 !strcmp(tag, CR2RES_UTIL_SLIT_CURV_TW_PROCATG) ||
184 !strcmp(tag, CR2RES_UTIL_WAVE_TW_PROCATG) ||
185 !strcmp(tag, CR2RES_UTIL_WAVE_MAP_PROCATG) ||
186 !strcmp(tag, CR2RES_UTIL_WAVE_LINES_DIAGNOSTICS_PROCATG) ||
187 !strcmp(tag, CR2RES_UTIL_WAVE_EXTRACT_1D_PROCATG) ||
189 !strcmp(tag, CR2RES_UTIL_TRACE_MAP_SLIT_CURVE_PROCATG) ||
190 !strcmp(tag, CR2RES_UTIL_TRACE_MAP_WL_PROCATG) ||
191 !strcmp(tag, CR2RES_UTIL_TRACE_MAP_TRACE_PROCATG) ||
193 !strcmp(tag, CR2RES_UTIL_SPLICE_SPLICED_1D_PROCATG)) {
195 cpl_frame_set_group(frame, CPL_FRAME_GROUP_CALIB);
198 return CPL_ERROR_NONE;
214 return cpl_sprintf(
"%02d_%s", order_idxp, CR2RES_COL_WL_SUFFIX) ;
230 return cpl_sprintf(
"%02d_%s", order_idxp, CR2RES_COL_POL_STOKES_SUFFIX) ;
246 return cpl_sprintf(
"%02d_%s", order_idxp,
247 CR2RES_COL_POL_STOKES_ERROR_SUFFIX) ;
263 return cpl_sprintf(
"%02d_%s", order_idxp, CR2RES_COL_POL_NULL_SUFFIX) ;
279 return cpl_sprintf(
"%02d_%s", order_idxp, CR2RES_COL_POL_NULL_ERROR_SUFFIX) ;
295 return cpl_sprintf(
"%02d_%s", order_idxp, CR2RES_COL_POL_INTENS_SUFFIX) ;
311 return cpl_sprintf(
"%02d_%s", order_idxp,
312 CR2RES_COL_POL_INTENS_ERROR_SUFFIX) ;
329 return cpl_sprintf(
"%02d_%02d_%s", order_idxp, trace,
330 CR2RES_COL_CONVERSION_SUFFIX);
347 return cpl_sprintf(
"%02d_%02d_%s", order_idxp, trace,
348 CR2RES_COL_SENSITIVITY_SUFFIX);
365 return cpl_sprintf(
"%02d_%02d_%s", order_idxp, trace,
366 CR2RES_COL_THROUGHPUT_SUFFIX);
383 return cpl_sprintf(
"%02d_%02d_%s", order_idxp, trace,
384 CR2RES_COL_SPEC_SUFFIX);
401 return cpl_sprintf(
"%02d_%02d_%s", order_idxp, trace,
402 CR2RES_COL_WL_SUFFIX);
419 return cpl_sprintf(
"%02d_%02d_%s", order_idxp, trace,
420 CR2RES_COL_ERROR_SUFFIX);
437 return cpl_sprintf(
"%02d_%02d_%s", order_idxp,trace,
438 CR2RES_COL_SLIT_FUNC_SUFFIX);
455 return cpl_sprintf(
"%02d_%02d_%s", order_idxp,trace,
456 CR2RES_COL_POSITIONX_SUFFIX);
473 return cpl_sprintf(
"%02d_%02d_%s", order_idxp,trace,
474 CR2RES_COL_POSITIONY_SUFFIX);
491 return cpl_sprintf(
"%02d_%02d_%s", order_idxp,trace,
492 CR2RES_COL_SLIT_FRACTION_SUFFIX);
506 const char * colname,
510 char col_type[1024] ;
511 if (colname == NULL || order_idx == NULL || trace == NULL)
return NULL ;
514 setlocale(LC_NUMERIC,
"C");
516 if (sscanf(colname,
"%02d_%02d_%s", order_idx, trace, col_type) != 3)
518 return cpl_strdup(col_type) ;
532 const char * colname,
535 char col_type[1024] ;
536 if (colname == NULL || order_idx == NULL)
return NULL ;
539 setlocale(LC_NUMERIC,
"C");
541 if (sscanf(colname,
"%02d_%s", order_idx, col_type) != 2)
543 return cpl_strdup(col_type) ;
558 if (nrows < 1)
return NULL;
560 out = cpl_table_new(nrows) ;
562 cpl_table_new_column(out, CR2RES_COL_ORDER, CPL_TYPE_INT) ;
563 cpl_table_new_column(out, CR2RES_COL_TRACENB, CPL_TYPE_INT);
564 cpl_table_new_column(out, CR2RES_COL_MEASURED_LAMBDA, CPL_TYPE_DOUBLE);
565 cpl_table_new_column(out, CR2RES_COL_CATALOG_LAMBDA, CPL_TYPE_DOUBLE);
566 cpl_table_new_column(out, CR2RES_COL_DELTA_LAMBDA, CPL_TYPE_DOUBLE);
567 cpl_table_new_column(out, CR2RES_COL_MEASURED_PIXEL, CPL_TYPE_DOUBLE);
568 cpl_table_new_column(out, CR2RES_COL_LINE_WIDTH, CPL_TYPE_DOUBLE);
569 cpl_table_new_column(out, CR2RES_COL_FIT_QUALITY, CPL_TYPE_DOUBLE);
570 cpl_table_new_column(out, CR2RES_COL_INTENSITY, CPL_TYPE_DOUBLE);
571 cpl_table_new_column(out, CR2RES_COL_FPET_M, CPL_TYPE_DOUBLE);
584 if (traces == NULL)
return -1 ;
587 if (!cpl_table_has_column(traces, CR2RES_COL_UPPER) ||
588 !cpl_table_has_column(traces, CR2RES_COL_LOWER) ||
589 !cpl_table_has_column(traces, CR2RES_COL_ALL) ||
590 !cpl_table_has_column(traces, CR2RES_COL_WAVELENGTH) ||
591 !cpl_table_has_column(traces, CR2RES_COL_WAVELENGTH_ERROR) ||
592 !cpl_table_has_column(traces, CR2RES_COL_ORDER) ||
593 !cpl_table_has_column(traces, CR2RES_COL_TRACENB) ||
594 !cpl_table_has_column(traces, CR2RES_COL_SLIT_CURV_A) ||
595 !cpl_table_has_column(traces, CR2RES_COL_SLIT_CURV_B) ||
596 !cpl_table_has_column(traces, CR2RES_COL_SLIT_CURV_C) ||
597 !cpl_table_has_column(traces, CR2RES_COL_SLIT_FRACTION)) {
char * cr2res_dfs_POL_colname_parse(const char *colname, int *order_idx)
Parse a column name ORDER_TYPE format.
char * cr2res_dfs_SLIT_FUNC_colname(int order_idx, int trace)
Get the SLIT_FUNC table column name for a given order/trace.
char * cr2res_dfs_POL_NULL_colname(int order_idx)
Get the POL_NULL column name for a given order.
char * cr2res_dfs_POL_STOKES_ERROR_colname(int order_idx)
Get the POL_STOKES_ERROR column name for a given order.
char * cr2res_dfs_CONVERSION_colname(int order_idx, int trace)
Get the CONVERSION column name for a given order/trace.
char * cr2res_dfs_SPEC_ERR_colname(int order_idx, int trace)
Get the ERR column name for a given order/trace.
char * cr2res_dfs_POL_INTENS_ERROR_colname(int order_idx)
Get the POL_INTENS_ERROR column name for a given order.
char * cr2res_dfs_SENSITIVITY_colname(int order_idx, int trace)
Get the SENSITIVITY column name for a given order/trace.
cpl_error_code cr2res_dfs_set_groups(cpl_frameset *set)
Set the group as RAW or CALIB in a frameset.
int cr2res_dfs_check_traces_table(const cpl_table *traces)
Check completeness of trace table.
char * cr2res_dfs_WAVELENGTH_colname(int order_idx, int trace)
Get the WAVELENGTH column name for a given order/trace.
char * cr2res_dfs_POSITIONY_colname(int order_idx, int trace)
Get the POSITIONY table column name for a given order/trace.
char * cr2res_dfs_SLIT_FRACTION_colname(int order_idx, int trace)
Get the SLIT_FRACTION table column name for a given order/trace.
char * cr2res_dfs_POL_NULL_ERROR_colname(int order_idx)
Get the POL_NULL_ERROR column name for a given order.
char * cr2res_dfs_POL_STOKES_colname(int order_idx)
Get the POL_STOKES column name for a given order.
char * cr2res_dfs_SPEC_colname_parse(const char *colname, int *order_idx, int *trace)
Parse a column name ORDER_TRACE_TYPE format.
char * cr2res_dfs_THROUGHPUT_colname(int order_idx, int trace)
Get the THROUGHPUT column name for a given order/trace.
char * cr2res_dfs_POL_INTENS_colname(int order_idx)
Get the POL_INTENS column name for a given order.
char * cr2res_dfs_SPEC_colname(int order_idx, int trace)
Get the SPEC column name for a given order/trace.
char * cr2res_dfs_POL_WAVELENGTH_colname(int order_idx)
Get the POL_WAVELENGTH column name for a given order.
char * cr2res_dfs_POSITIONX_colname(int order_idx, int trace)
Get the POSITIONX table column name for a given order/trace.
cpl_table * cr2res_dfs_create_lines_diagnostics_table(int nrows)
Create an empty LINES DIAGNOSTICS table.
int cr2res_io_convert_order_idx_to_idxp(int order_idx)
Convert the order_idx to the order_idxp.