DETMON Pipeline Reference Manual  1.3.0
detmon_lg.h
1 /* $Id: detmon_lg.h,v 1.4 2013-06-18 13:34:19 jtaylor Exp $
2  *
3  * This file is part of the irplib package
4  * Copyright (C) 2002, 2003 European Southern Observatory
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
19  */
20 
21 /*
22  * $Author: jtaylor $
23  * $Date: 2013-06-18 13:34:19 $
24  * $Revision: 1.4 $
25  * $Name: not supported by cvs2svn $
26  */
27 
28 #ifndef IRPLIB_DETMON_LG_H
29 #define IRPLIB_DETMON_LG_H
30 
31 /*----------------------------------------------------------------------------
32  Includes
33  ----------------------------------------------------------------------------*/
34 
35 #include <cpl.h>
36 #include <detmon_cpl_size.h>
37 
38 /*----------------------------------------------------------------------------
39  Prototypes
40  ----------------------------------------------------------------------------*/
41 /* Define here the DO.CATG keywords */
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"
46 
47 
48 #define NIR TRUE
49 #define OPT FALSE
50 
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]"
53 
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]"
56 
57 #define DETMON_QC_CONAD "ESO QC CONAD"
58 #define DETMON_QC_CONAD_C "Conversion from e- to ADUs [ADU/e-]"
59 
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-]"
62 
63 #define DETMON_QC_GAIN "ESO QC GAIN"
64 #define DETMON_QC_GAIN_C "GAIN (see QC.METHOD) [e-/ADU]"
65 
66 #define DETMON_QC_GAIN_MSE "ESO QC GAIN MSE"
67 #define DETMON_QC_GAIN_MSE_C "Measured Squared error in GAIN computation"
68 
69 #define DETMON_QC_RON "ESO QC RON"
70 #define DETMON_QC_RON_C "RON obtained as independent term (PTC method)"
71 
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]"
77 
78 #define DETMON_QC_LAMP_FLUX "ESO QC LAMP FLUX"
79 #define DETMON_QC_LAMP_FLUX_C "Lamp flux"
80 
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"
84 
85 #define DETMON_QC_LAMP_STAB "ESO QC LAMP STAB"
86 #define DETMON_QC_LAMP_STAB_C "Lamp stability"
87 
88 #define DETMON_QC_METHOD "ESO QC METHOD"
89 #define DETMON_QC_METHOD_C "Method applied to compute GAIN"
90 
91 #define DETMON_QC_LIN_EFF "ESO QC LIN EFF"
92 #define DETMON_QC_LIN_EFF_C "Effective non-linearity correction"
93 
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"
96 
97 #define DETMON_QC_LIN_COEF "ESO QC LIN COEF"
98 #define DETMON_QC_LIN_COEF_C "Linearity coefficient value"
99 
100 
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"
104 
105 
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"
109 
110 
111 #define DETMON_QC_CONTAM "ESO QC CONTAM"
112 #define DETMON_QC_CONTAM_C "Detector contamination in a region"
113 
114 #define DETMON_QC_FPN "ESO QC FPN"
115 #define DETMON_QC_FPN_C "Flat pattern noise"
116 
117 /* Macros to generate the recipe(s) description(s) */
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 " \
136  "computation.\n" \
137  "To perform a stability check you need frames with at least 2 DIT " \
138  "values\n" \
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" \
141  "\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"
147 
148 #define REGEXP "ARCFILE|MJD-OBS|ESO TPL ID|DATE-OBS|ESO DET DIT|ESO DET NDIT"
149 
150 typedef unsigned long irplib_gain_flag;
151 
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)
160 
161 typedef unsigned long irplib_lin_flag;
162 
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)
169 
170 cpl_error_code
171 detmon_lg(cpl_frameset * frameset,
172  const cpl_parameterlist * parlist,
173  const char * tag_on,
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 *,
186  const cpl_frame *),
187  int (* load_fset) (const cpl_frameset *,
188  cpl_type,
189  cpl_imagelist *),
190  const cpl_boolean opt_nir);
191 
192 
193 cpl_image * detmon_image_correlate(const cpl_image *,
194  const cpl_image *,
195  const int ,
196  const int );
197 
198 cpl_error_code
199 detmon_lg_fill_parlist_nir_default(cpl_parameterlist *,
200  const char *,
201  const char *);
202 
203 cpl_error_code
204 detmon_lg_fill_parlist_nir_default_mr(cpl_parameterlist * parlist,
205  const char *recipe_name,
206  const char *pipeline_name);
207 
208 cpl_error_code
209 detmon_lg_fill_parlist_opt_default(cpl_parameterlist *,
210  const char *,
211  const char *);
212 
213 cpl_error_code
214 detmon_lg_fill_parlist_opt_default_mr(cpl_parameterlist * parlist,
215  const char *recipe_name,
216  const char *pipeline_name);
217 
218 cpl_error_code
219 detmon_lg_fill_parlist(cpl_parameterlist * parlist,
220  const char *recipe_name, const char *pipeline_name,
221  const char *method,
222  int order,
223  double kappa,
224  int niter,
225  int llx,
226  int lly,
227  int urx,
228  int ury,
229  int ref_level,
230  const char * intermediate,
231  const char * autocorr,
232  const char * collapse,
233  const char * rescale,
234  const char * pix2pix,
235  const char * bpmbin,
236  int filter,
237  int m,
238  int n,
239  double tolerance,
240  const char * pafgen,
241  const char * pafname,
242  int llx1,
243  int lly1,
244  int urx1,
245  int ury1,
246  int llx2,
247  int lly2,
248  int urx2,
249  int ury2,
250  int llx3,
251  int lly3,
252  int urx3,
253  int ury3,
254  int llx4,
255  int lly4,
256  int urx4,
257  int ury4,
258  int llx5,
259  int lly5,
260  int urx5,
261  int ury5,
262  int exts,
263  cpl_boolean opt_nir);
264 
265 cpl_image *
266 detmon_autocorrelate(const cpl_image *,
267  const int, const int);
268 
269 cpl_table *
270 detmon_gain(const cpl_imagelist *,
271  const cpl_imagelist *,
272  const cpl_vector *,
273  const cpl_vector *,
274  double ,
275  int ,
276  int ,
277  int ,
278  int ,
279  double ,
280  int ,
281  int ,
282  int ,
283  cpl_propertylist *,
284  unsigned ,
285  cpl_imagelist **,
286  cpl_imagelist **);
287 
288 cpl_table *
289 detmon_lin(const cpl_imagelist *,
290  const cpl_imagelist *,
291  const cpl_vector *,
292  double ,
293  int ,
294  int ,
295  int ,
296  int ,
297  int ,
298  int ,
299  double,
300  cpl_boolean,
301  cpl_propertylist *,
302  unsigned ,
303  cpl_imagelist **,
304  cpl_image **);
305 
306 cpl_error_code
307 detmon_lg_set_tag(cpl_frameset* set, const char** tag_on, const char** tag_off);
308 #endif