28 #ifndef IRPLIB_DETMON_LG_H
29 #define IRPLIB_DETMON_LG_H
36 #include <detmon_cpl_size.h>
42 #define DETMON_LG_ON_RAW_OLD "ON_RAW"
43 #define DETMON_LG_OFF_RAW_OLD "OFF_RAW"
44 #define DETMON_LG_ON_RAW_NEW "DETMON_LAMP_ON"
45 #define DETMON_LG_OFF_RAW_NEW "DETMON_LAMP_OFF"
51 #define DETMON_QC_COUNTS_MIN "ESO QC COUNTS MIN"
52 #define DETMON_QC_COUNTS_MIN_C "Minimum median value used in linearity test (in a user defined region) [ADU]"
54 #define DETMON_QC_COUNTS_MAX "ESO QC COUNTS MAX"
55 #define DETMON_QC_COUNTS_MAX_C "Maximum median value used in linearity test (in a user defined region) [ADU]"
57 #define DETMON_QC_CONAD "ESO QC CONAD"
58 #define DETMON_QC_CONAD_C "Conversion from e- to ADUs [ADU/e-]"
60 #define DETMON_QC_CONAD_CORR "ESO QC CONAD CORR"
61 #define DETMON_QC_CONAD_CORR_C "CONAD value taken QC.AUTOCORR into account [ADU/e-]"
63 #define DETMON_QC_GAIN "ESO QC GAIN"
64 #define DETMON_QC_GAIN_C "GAIN (see QC.METHOD) [e-/ADU]"
66 #define DETMON_QC_GAIN_MSE "ESO QC GAIN MSE"
67 #define DETMON_QC_GAIN_MSE_C "Measured Squared error in GAIN computation"
69 #define DETMON_QC_RON "ESO QC RON"
70 #define DETMON_QC_RON_C "RON obtained as independent term (PTC method)"
72 #define DETMON_QC_AUTOCORR "ESO QC AUTOCORR"
73 #define DETMON_QC_AUTOCORR_C "Autocorrelation factor computed as sum of " \
74 "all pixels in autocorrelation image"
75 #define DETMON_QC_GAIN_CORR "ESO QC GAIN CORR"
76 #define DETMON_QC_GAIN_CORR_C "GAIN taken QC.AUTOCORR into account [e-/ADU]"
78 #define DETMON_QC_LAMP_FLUX "ESO QC LAMP FLUX"
79 #define DETMON_QC_LAMP_FLUX_C "Lamp flux"
81 #define DETMON_QC_NUM_BPM "ESO QC NUM BPM"
82 #define DETMON_QC_NUM_BPM_C "Number of bad pixels detected according to "\
83 "polynomial information"
85 #define DETMON_QC_LAMP_STAB "ESO QC LAMP STAB"
86 #define DETMON_QC_LAMP_STAB_C "Lamp stability"
88 #define DETMON_QC_METHOD "ESO QC METHOD"
89 #define DETMON_QC_METHOD_C "Method applied to compute GAIN"
91 #define DETMON_QC_LIN_EFF "ESO QC LIN EFF"
92 #define DETMON_QC_LIN_EFF_C "Effective non-linearity correction"
94 #define DETMON_QC_LIN_EFF_FLUX "ESO QC LIN EFF FLUX"
95 #define DETMON_QC_LIN_EFF_FLUX_C "FLux level at which effective non-linearity correction is computed"
97 #define DETMON_QC_LIN_COEF "ESO QC LIN COEF"
98 #define DETMON_QC_LIN_COEF_C "Linearity coefficient value"
101 #define DETMON_QC_LIN_COEF_ERR "ESO QC LIN EFF ERR"
102 #define DETMON_QC_LIN_COEF_ERR_C "Linearity coefficient error value"
103 #define DETMON_QC_LIN_COEF_MSE_ERR_C "Linearity coefficient measured square error value"
106 #define DETMON_QC_ERRFIT "ESO QC ERRFIT"
107 #define DETMON_QC_ERRFIT_C "Error of fit"
108 #define DETMON_QC_ERRFIT_MSE_C "Measured square error of fit"
111 #define DETMON_QC_CONTAM "ESO QC CONTAM"
112 #define DETMON_QC_CONTAM_C "Detector contamination in a region"
114 #define DETMON_QC_FPN "ESO QC FPN"
115 #define DETMON_QC_FPN_C "Flat pattern noise"
118 #define detmon_lg_get_description(RECIPE_NAME, PIPE_NAME, \
119 DETMON_LG_ON_RAW_NEW, \
120 DETMON_LG_OFF_RAW_NEW, \
121 DETMON_LG_ON_RAW_OLD, \
122 DETMON_LG_OFF_RAW_OLD) \
123 RECIPE_NAME " -- " PIPE_NAME " linearity/gain recipe for OPT/IR.\n" \
124 "The files listed in the Set Of Frames must be tagged:\n" \
125 "the raw-on-file.fits "DETMON_LG_ON_RAW_NEW" and\n" \
126 "the raw-off-file.fits "DETMON_LG_OFF_RAW_NEW"\n" \
127 "For backward compatibility are alternatively still supported the following tags:\n" \
128 "the raw-on-file.fits "DETMON_LG_ON_RAW_OLD" and\n" \
129 "the raw-off-file.fits "DETMON_LG_OFF_RAW_OLD"\n" \
130 "The recipe requires at least order+1 valid pairs of ON frames\n" \
131 "and order+1 valid pairs of OFF frames, \n" \
132 "where order is the value of the 'order' parameter.\n" \
133 "There is no requirement for pairs of OFF frames if collapse parameter " \
134 "is set to true.\n" \
135 "Frames with median flux over --filter will be excluded from the " \
137 "To perform a stability check you need frames with at least 2 DIT " \
139 "NOTE for multiextension cases: it is mandatory to modify the --exts " \
140 "parameter, either to -1 (all extensions) or to any valid extension nb.\n" \
142 "The output PRO.CATG are:\n" \
143 "GAIN_INFO - the gain table\n" \
144 "DET_LIN_INFO - the linearity table\n" \
145 "BP_MAP_NL - the bad pixel map (only produced with --pix2pix=TRUE)\n" \
146 "COEFFS_CUBE - the fit coefficient cube (only produced with --pix2pix=TRUE)\n"
148 #define REGEXP "ARCFILE|MJD-OBS|ESO TPL ID|DATE-OBS|ESO DET DIT|ESO DET NDIT"
150 typedef unsigned long irplib_gain_flag;
152 #define IRPLIB_GAIN_PTC ((irplib_gain_flag) 1 << 1)
153 #define IRPLIB_GAIN_MEDIAN ((irplib_gain_flag) 1 << 2)
154 #define IRPLIB_GAIN_NO_COLLAPSE ((irplib_gain_flag) 1 << 3)
155 #define IRPLIB_GAIN_COLLAPSE ((irplib_gain_flag) 1 << 4)
156 #define IRPLIB_GAIN_WITH_AUTOCORR ((irplib_gain_flag) 1 << 5)
157 #define IRPLIB_GAIN_WITH_RESCALE ((irplib_gain_flag) 1 << 6)
158 #define IRPLIB_GAIN_OPT ((irplib_gain_flag) 1 << 7)
159 #define IRPLIB_GAIN_NIR ((irplib_gain_flag) 1 << 8)
161 typedef unsigned long irplib_lin_flag;
163 #define IRPLIB_LIN_NO_COLLAPSE ((irplib_lin_flag) 1 << 10)
164 #define IRPLIB_LIN_COLLAPSE ((irplib_lin_flag) 1 << 11)
165 #define IRPLIB_LIN_PIX2PIX ((irplib_lin_flag) 1 << 12)
166 #define IRPLIB_LIN_WITH_RESCALE ((irplib_lin_flag) 1 << 13)
167 #define IRPLIB_LIN_OPT ((irplib_lin_flag) 1 << 14)
168 #define IRPLIB_LIN_NIR ((irplib_lin_flag) 1 << 15)
171 detmon_lg(cpl_frameset * frameset,
172 const cpl_parameterlist * parlist,
174 const char * tag_off,
175 const char * recipe_name,
176 const char * pipeline_name,
177 const char * pafregexp,
178 const cpl_propertylist * pro_lintbl,
179 const cpl_propertylist * pro_gaintbl,
180 const cpl_propertylist * pro_coeffscube,
181 const cpl_propertylist * pro_bpm,
182 const cpl_propertylist * pro_corr,
183 const cpl_propertylist * pro_diff,
184 const char * package,
185 int (* compare) (
const cpl_frame *,
187 int (* load_fset) (
const cpl_frameset *,
190 const cpl_boolean opt_nir);
193 cpl_image * detmon_image_correlate(
const cpl_image *,
199 detmon_lg_fill_parlist_nir_default(cpl_parameterlist *,
204 detmon_lg_fill_parlist_nir_default_mr(cpl_parameterlist * parlist,
205 const char *recipe_name,
206 const char *pipeline_name);
209 detmon_lg_fill_parlist_opt_default(cpl_parameterlist *,
214 detmon_lg_fill_parlist_opt_default_mr(cpl_parameterlist * parlist,
215 const char *recipe_name,
216 const char *pipeline_name);
219 detmon_lg_fill_parlist(cpl_parameterlist * parlist,
220 const char *recipe_name,
const char *pipeline_name,
230 const char * intermediate,
231 const char * autocorr,
232 const char * collapse,
233 const char * rescale,
234 const char * pix2pix,
241 const char * pafname,
263 cpl_boolean opt_nir);
266 detmon_autocorrelate(
const cpl_image *,
267 const int,
const int);
270 detmon_gain(
const cpl_imagelist *,
271 const cpl_imagelist *,
289 detmon_lin(
const cpl_imagelist *,
290 const cpl_imagelist *,
307 detmon_lg_set_tag(cpl_frameset* set,
const char** tag_on,
const char** tag_off);