DETMON Pipeline Reference Manual  1.2.4
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: detmon-1_2_4 $
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 "CONAD value [el/ADU]"
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 [el/ADU]"
62 
63 #define DETMON_QC_GAIN "ESO QC GAIN"
64 #define DETMON_QC_GAIN_C "GAIN (see QC.METHOD) [ADU/el]"
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 [el/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 
142 #define REGEXP "ARCFILE|MJD-OBS|ESO TPL ID|DATE-OBS|ESO DET DIT|ESO DET NDIT"
143 
144 typedef unsigned long irplib_gain_flag;
145 
146 #define IRPLIB_GAIN_PTC ((irplib_gain_flag) 1 << 1)
147 #define IRPLIB_GAIN_MEDIAN ((irplib_gain_flag) 1 << 2)
148 #define IRPLIB_GAIN_NO_COLLAPSE ((irplib_gain_flag) 1 << 3)
149 #define IRPLIB_GAIN_COLLAPSE ((irplib_gain_flag) 1 << 4)
150 #define IRPLIB_GAIN_WITH_AUTOCORR ((irplib_gain_flag) 1 << 5)
151 #define IRPLIB_GAIN_WITH_RESCALE ((irplib_gain_flag) 1 << 6)
152 #define IRPLIB_GAIN_OPT ((irplib_gain_flag) 1 << 7)
153 #define IRPLIB_GAIN_NIR ((irplib_gain_flag) 1 << 8)
154 
155 typedef unsigned long irplib_lin_flag;
156 
157 #define IRPLIB_LIN_NO_COLLAPSE ((irplib_lin_flag) 1 << 10)
158 #define IRPLIB_LIN_COLLAPSE ((irplib_lin_flag) 1 << 11)
159 #define IRPLIB_LIN_PIX2PIX ((irplib_lin_flag) 1 << 12)
160 #define IRPLIB_LIN_WITH_RESCALE ((irplib_lin_flag) 1 << 13)
161 #define IRPLIB_LIN_OPT ((irplib_lin_flag) 1 << 14)
162 #define IRPLIB_LIN_NIR ((irplib_lin_flag) 1 << 15)
163 
164 cpl_error_code
165 detmon_lg(cpl_frameset * frameset,
166  const cpl_parameterlist * parlist,
167  const char * tag_on,
168  const char * tag_off,
169  const char * recipe_name,
170  const char * pipeline_name,
171  const char * pafregexp,
172  const cpl_propertylist * pro_lintbl,
173  const cpl_propertylist * pro_gaintbl,
174  const cpl_propertylist * pro_coeffscube,
175  const cpl_propertylist * pro_bpm,
176  const cpl_propertylist * pro_corr,
177  const cpl_propertylist * pro_diff,
178  const char * package,
179  int (* compare) (const cpl_frame *,
180  const cpl_frame *),
181  int (* load_fset) (const cpl_frameset *,
182  cpl_type,
183  cpl_imagelist *),
184  const cpl_boolean opt_nir);
185 
186 
187 cpl_image * detmon_image_correlate(const cpl_image *,
188  const cpl_image *,
189  const int ,
190  const int );
191 
192 cpl_error_code
193 detmon_lg_fill_parlist_nir_default(cpl_parameterlist *,
194  const char *,
195  const char *);
196 
197 cpl_error_code
198 detmon_lg_fill_parlist_opt_default(cpl_parameterlist *,
199  const char *,
200  const char *);
201 
202 cpl_error_code
203 detmon_lg_fill_parlist_opt_default_mr(cpl_parameterlist * parlist,
204  const char *recipe_name,
205  const char *pipeline_name);
206 
207 cpl_error_code
208 detmon_lg_fill_parlist(cpl_parameterlist * parlist,
209  const char *recipe_name, const char *pipeline_name,
210  const char *method,
211  int order,
212  double kappa,
213  int niter,
214  int llx,
215  int lly,
216  int urx,
217  int ury,
218  int ref_level,
219  const char * intermediate,
220  const char * autocorr,
221  const char * collapse,
222  const char * rescale,
223  const char * pix2pix,
224  const char * bpmbin,
225  int filter,
226  int m,
227  int n,
228  double tolerance,
229  const char * pafgen,
230  const char * pafname,
231  int llx1,
232  int lly1,
233  int urx1,
234  int ury1,
235  int llx2,
236  int lly2,
237  int urx2,
238  int ury2,
239  int llx3,
240  int lly3,
241  int urx3,
242  int ury3,
243  int llx4,
244  int lly4,
245  int urx4,
246  int ury4,
247  int llx5,
248  int lly5,
249  int urx5,
250  int ury5,
251  int exts,
252  cpl_boolean opt_nir);
253 
254 cpl_image *
255 detmon_autocorrelate(const cpl_image *,
256  const int, const int);
257 
258 cpl_table *
259 detmon_gain(const cpl_imagelist *,
260  const cpl_imagelist *,
261  const cpl_vector *,
262  const cpl_vector *,
263  double ,
264  int ,
265  int ,
266  int ,
267  int ,
268  double ,
269  int ,
270  int ,
271  int ,
272  cpl_propertylist *,
273  unsigned ,
274  cpl_imagelist **,
275  cpl_imagelist **);
276 
277 cpl_table *
278 detmon_lin(const cpl_imagelist *,
279  const cpl_imagelist *,
280  const cpl_vector *,
281  double ,
282  int ,
283  int ,
284  int ,
285  int ,
286  int ,
287  int ,
288  double,
289  cpl_boolean,
290  cpl_propertylist *,
291  unsigned ,
292  cpl_imagelist **,
293  cpl_image **);
294 
295 cpl_error_code
296 detmon_lg_set_tag(cpl_frameset* set, const char** tag_on, const char** tag_off);
297 #endif