ERIS Pipeline Reference Manual 1.9.2
eris_nix_img_scired.c
1/* $Id$
2 *
3 * This file is part of the ERIS Pipeline
4 * Copyright (C) 2017 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 02110-1301 USA
19 */
20
21/*
22 * $Author$
23 * $Date$
24 * $Revision$
25 */
26
27#ifdef HAVE_CONFIG_H
28#include <config.h>
29#endif
30
31/*-----------------------------------------------------------------------------
32 Includes
33 -----------------------------------------------------------------------------*/
34
35//#include <libgen.h>
36//#include <math.h>
37#include <string.h>
38#include <eris_utils.h>
39//#include "casu_utils.h"
40//#include "casu_mods.h"
41
42//#include "eris_utils.h"
43//#include "eris_nix_utils.h"
44//#include "eris_pfits.h"
45//#include "eris_dfs.h"
46#include "eris_nix_dfs.h"
47//#include "eris_nix_master_bpm.h"
48//#include "eris_nix_master_dark.h"
49//#include "eris_nix_gain_linearity.h"
50//#include <hdrl.h>
51#include "eris_nix_scired.h"
52#include <cpl.h>
53
54/*-----------------------------------------------------------------------------
55 Static variables
56 -----------------------------------------------------------------------------*/
57
58static const char eris_nix_img_scired_description[] =
59"This recipe removes the detector signature from "
60ERIS_NIX_RAW_OBJECT_JITTER_DO_CATG",\n"
61ERIS_NIX_RAW_SKY_JITTER_DO_CATG" and "
62ERIS_NIX_RAW_STD_JITTER_DO_CATG" frames."
63"This comprises dark subtraction,\n"
64"linearization, flat-fielding, and association with the master \n"
65"bad-pixel mask.\n"
66"\n"
67"Input files:\n"
68"\n"
69" DO CATG Explanation Req. #Frames\n"
70" ------- ----------- --- -------\n"
71" "ERIS_NIX_RAW_OBJECT_JITTER_DO_CATG
72 " object jitter frames N 0-n\n"
73" "ERIS_NIX_RAW_SKY_JITTER_DO_CATG
74 " offset sky jitter N 0-n\n"
75" frames\n"
76" "ERIS_NIX_RAW_STD_JITTER_DO_CATG
77 " standard jitter N 0-n\n"
78" frames\n"
79" "ERIS_NIX_RAW_OBJECT_LSS_JITTER_DO_CATG
80 " object LSS jitter N 0-n\n"
81" frames\n"
82" "ERIS_NIX_RAW_SKY_LSS_JITTER_DO_CATG
83 " sky LSS jitter N 0-n\n"
84" frames\n"
85" "ERIS_NIX_RAW_STD_LSS_JITTER_DO_CATG
86 " standard LSS jitter N 0-n\n"
87" frames\n"
88" "ERIS_NIX_MASTER_DARK_IMG_PRO_CATG
89 " a MASTER_DARK with Y 1\n"
90" matching detector \n"
91" configuration\n"
92" "ERIS_NIX_MASTER_BPM_LAMP_PRO_CATG
93 " a lamp MASTER_BPM Y 1\n"
94" or\n"
95" "ERIS_NIX_MASTER_BPM_SKY_PRO_CATG
96 " a sky MASTER_BPM Y 1\n"
97" "ERIS_NIX_MASTER_FLAT_LAMP_HIFREQ_PRO_CATG
98 " a lamp hifreq flat N 0 or 1\n"
99" matching observing \n"
100" configuration\n"
101" "ERIS_NIX_MASTER_FLAT_SKY_HIFREQ_PRO_CATG
102 " a sky hifreq flat N 0 or 1\n"
103" matching observing \n"
104" configuration\n"
105" "ERIS_NIX_MASTER_FLAT_LAMP_LOFREQ_PRO_CATG
106 " a lamp hifreq flat N 0 or 1\n"
107" matching observing \n"
108" configuration\n"
109" "ERIS_NIX_MASTER_FLAT_SKY_LOFREQ_PRO_CATG
110 " a sky hifreq flat N 0 or 1\n"
111" matching observing \n"
112" configuration\n"
113" "ERIS_NIX_MASTER_FLAT_TWILIGHT_LOFREQ_PRO_CATG"\n"
114" a twilight lofreq flat N 0 or 1\n"
115" matching observing \n"
116" configuration (preferred\n"
117" over the LAMP version\n"
118" below)\n"
119" "ERIS_NIX_GAIN_PRO_CATG
120 " DETMON gain information N 0 or 1\n"
121" e.g. in file \n"
122" detmon_ir_lg_gain_table.fits\n"
123" "ERIS_NIX_COEFFS_CUBE_PRO_CATG
124 " DETMON linearity curves N 0 or 1\n"
125" e.g. in file \n"
126" detmon_ir_coeffs_cube.fits\n"
127" "ERIS_NIX_NL_BPM_PRO_CATG
128 " DETMON non-linear bpm N 0 or 1\n"
129" e.g. in file \n"
130" detmon_ir_lg_bpm.fits\n"
131"\n"
132"Output files:\n"
133"\n"
134" DO CATG Explanation \n"
135" ------- ----------- \n"
136" "ERIS_NIX_CAL_DET_OBJECT_JITTER_PRO_CATG
137 " Calibrated results.\n"
138" or "ERIS_NIX_CAL_DET_SKY_JITTER_PRO_CATG"\n"
139" or "ERIS_NIX_CAL_DET_STD_JITTER_PRO_CATG"\n"
140" or "ERIS_NIX_CAL_DET_OBJECT_LSS_JITTER_PRO_CATG"\n"
141" or "ERIS_NIX_CAL_DET_SKY_LSS_JITTER_PRO_CATG"\n"
142" or "ERIS_NIX_CAL_DET_STD_LSS_JITTER_PRO_CATG"\n"
143"\n"
144" The output will be a FITS file named 'cal_det_<inputname>.fits',\n"
145" with extensions:\n"
146" - DATA the result data.\n"
147" - ERR the result error plane.\n"
148" - DQ the result data quality plane.\n"
149" - CONFIDENCE the result confidence plane.\n"
150"\n";
151
152#define RECIPE_NAME "eris_nix_img_scired"
153#define CONTEXT "eris."RECIPE_NAME
154/*-----------------------------------------------------------------------------
155 Private function prototypes
156 -----------------------------------------------------------------------------*/
157
158cpl_recipe_define(eris_nix_img_scired, ERIS_BINARY_VERSION,
159 "John Lightfoot",
160 PACKAGE_BUGREPORT, "2017",
161 "Remove detector signature from frames",
162 eris_nix_img_scired_description);
163
164/*-----------------------------------------------------------------------------
165 Function code
166 -----------------------------------------------------------------------------*/
167
168/*----------------------------------------------------------------------------*/
176/*----------------------------------------------------------------------------*/
177
178static cpl_error_code eris_nix_img_scired_fill_parameterlist(
179 cpl_parameterlist * self) {
180
181 if (cpl_error_get_code() != CPL_ERROR_NONE) return cpl_error_get_code();
182
183
184 hdrl_parameter * catalogue_defaults = NULL;
185 cpl_parameterlist * catalogue_parlist = NULL;
186 cpl_parameter* p;
187
188 /*------------------------------------------------------------------------*/
189 /* CALDET PARAMETERS */
190 /*------------------------------------------------------------------------*/
191 p = cpl_parameter_new_enum(CONTEXT".fill-rejected",
192 CPL_TYPE_STRING,
193 "how to treat reject pixel",
194 CONTEXT,
195 "set_value", 3,
196 "set_value",
197 "set_NaN",
198 "noop");
199 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "fill-rejected");
200 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
201 cpl_parameterlist_append(self, p);
202
203 p = cpl_parameter_new_value(CONTEXT".fill-value",
204 CPL_TYPE_DOUBLE,
205 "value to use in 'set_value' case",
206 CONTEXT, 0.0);
207 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "fill-value");
208 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
209 cpl_parameterlist_append(self, p);
210
211 /* Flag to decide whether to apply corrected CD matrices to data */
212
213 p = cpl_parameter_new_value(CONTEXT".cd_matrix_modify",
214 CPL_TYPE_BOOL,
215 "TRUE to insert corrected CD-matrix",
216 CONTEXT, CPL_TRUE);
217 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "cd-matrix-modify");
218 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
219 cpl_parameterlist_append(self, p);
220
221 /* coords of pixel to be used for diagnostics during reduction */
222
223 p = cpl_parameter_new_value(CONTEXT".x_probe", CPL_TYPE_INT,
224 "x coord of diagnostic pixel",
225 CONTEXT, -1);
226 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "x-probe");
227 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
228 cpl_parameterlist_append(self, p);
229
230 p = cpl_parameter_new_value(CONTEXT".y_probe", CPL_TYPE_INT,
231 "y coord of diagnostic pixel",
232 CONTEXT, -1);
233 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "y-probe");
234 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
235 cpl_parameterlist_append(self, p);
236
237 p = cpl_parameter_new_range(CONTEXT".collapse_cube", CPL_TYPE_INT,
238 "Collapse cube if DET.FRAM.FORMAT is cube. Possible values: "
239 "0, no collapse; 1, mean collapse; 2, median collapse",
240 CONTEXT, 0, 0, 2);
241 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "collapse-cube");
242 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
243 cpl_parameterlist_append(self, p);
244
245 /*------------------------------------------------------------------------*/
246 /* SKYSUB PARAMETERS */
247 /*------------------------------------------------------------------------*/
248 /* generate the general parameter list for the catalogue */
249
250 catalogue_defaults = hdrl_catalogue_parameter_create(20, 3.0, CPL_TRUE,
251 10.0, CPL_TRUE, 64, 2.0, 3.0,
252 ERIS_NIX_SATURATION_DEFAULT, HDRL_CATALOGUE_ALL);
253 catalogue_parlist = hdrl_catalogue_parameter_create_parlist(CONTEXT,
254 "catalogue", catalogue_defaults);
255
256 /* add the subset of parameters to be used */
257
258 for (p = cpl_parameterlist_get_first(catalogue_parlist);
259 p != NULL;
260 p = cpl_parameterlist_get_next(catalogue_parlist)) {
261
262 const char * pname = cpl_parameter_get_name(p);
263 if (strstr(pname, "min-pixels") ||
264 strstr(pname, "threshold") ||
265 strstr(pname, "mesh-size") ||
266 strstr(pname, "threshold") ||
267 strstr(pname, "smooth-gauss-fwhm")) {
268 cpl_parameter * duplicate = cpl_parameter_duplicate(p);
269 cpl_parameterlist_append(self, duplicate);
270 }
271 }
272
273
274
275
276
277 /* now the recipe-specific parameters */
278
279 /* generate the general parameter list for the catalogue */
280 eris_nix_catalogue_param_set(CONTEXT, self, 20, 3.0, CPL_TRUE,
281 5.0, CPL_TRUE, 64, 2.0, 3.0, ERIS_NIX_SATURATION_DEFAULT, HDRL_CATALOGUE_ALL);
282
283 p = cpl_parameter_new_enum(CONTEXT".sky-source", CPL_TYPE_STRING,
284 "data to be used for calculation of sky "
285 "background", CONTEXT,
286 "auto", 3, "auto", "target", "offset");
287 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "sky-source");
288 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
289 cpl_parameterlist_append(self, p);
290
291 p = cpl_parameter_new_enum(CONTEXT".sky-selector", CPL_TYPE_STRING,
292 "method for selecting sky frames",
293 CONTEXT, "bracket", 1, "bracket");
294 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "sky-selector");
295 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
296 cpl_parameterlist_append(self, p);
297
298 p = cpl_parameter_new_enum(CONTEXT".sky-method", CPL_TYPE_STRING,
299 "method for combining sky frames",
300 CONTEXT, "collapse-median", 2,
301 "collapse-median", "median-median");
302 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "sky-method");
303 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
304 cpl_parameterlist_append(self, p);
305
306 p = cpl_parameter_new_range(CONTEXT".sky-bracket-time", CPL_TYPE_DOUBLE,
307 "2 * max.time between target and sky measurement",
308 CONTEXT, 1800.0, 60.0, 18000.0);
309 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "sky-bracket-time");
310 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
311 cpl_parameterlist_append(self, p);
312
313
314 p = cpl_parameter_new_value(CONTEXT".esoformat",
315 CPL_TYPE_BOOL,
316 "TRUE to output MEF file conforming to ESO standard",
317 CONTEXT, CPL_TRUE);
318 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "esoformat");
319 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
320 cpl_parameterlist_append(self, p);
321
322 /* coords of pixel to be used for diagnostics during reduction */
323
324 p = cpl_parameter_new_value(CONTEXT".x_probe", CPL_TYPE_INT,
325 "x coord of diagnostic pixel",
326 CONTEXT, -1);
327 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "x-probe");
328 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
329 cpl_parameterlist_append(self, p);
330
331 p = cpl_parameter_new_value(CONTEXT".y_probe", CPL_TYPE_INT,
332 "y coord of diagnostic pixel",
333 CONTEXT, -1);
334 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "y-probe");
335 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
336 cpl_parameterlist_append(self, p);
337
338
339
340
341 /*------------------------------------------------------------------------*/
342 /* WCS PARAMETERS */
343 /*------------------------------------------------------------------------*/
344
345
346
347 /* add the subset of parameters to be used */
348
349 for (p = cpl_parameterlist_get_first(catalogue_parlist);
350 p != NULL;
351 p = cpl_parameterlist_get_next(catalogue_parlist)) {
352
353 const char * pname = cpl_parameter_get_name(p);
354 if (strstr(pname, "minmax") == NULL) {
355 cpl_parameter * duplicate = cpl_parameter_duplicate(p);
356 cpl_parameterlist_append(self, duplicate);
357 }
358 }
359
360 /* Flag to decide how we get the astrometric standard star information.
361 If "none", then use the local catalogues specified in the sof. If not,
362 then use one of the selection of catalogues available from CDS -
363 only gaia has sufficient accuracy */
364
365 p = cpl_parameter_new_enum(CONTEXT".cdssearch_astrom",
366 CPL_TYPE_STRING,
367 "CDS astrometric catalogue",
368 CONTEXT,
369 "none", 3, "none", "2MASS", "gaiaedr3");
370 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "cdssearch-astrom");
371 cpl_parameterlist_append(self, p);
372
373 p = cpl_parameter_new_value(CONTEXT".pixel_radius",
374 CPL_TYPE_DOUBLE,
375 "Max. distance between object and catalogue "
376 "entry for association (pixels)",
377 CONTEXT, 5.0);
378 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "pixel-radius");
379 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
380 cpl_parameterlist_append(self, p);
381
382 p = cpl_parameter_new_value(CONTEXT".strict_classification",
383 CPL_TYPE_BOOL,
384 "TRUE if objects to match must be classified "
385 "stellar and round",
386 CONTEXT, CPL_TRUE);
387 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "strict-classification");
388 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
389 cpl_parameterlist_append(self, p);
390
391
392
393 p = cpl_parameter_new_value(CONTEXT".edges-trim",
394 CPL_TYPE_STRING,
395 "Trim image edges in the source detection: "
396 "[txmin,tymin,txmax,tymax]. t means trim "
397 "the user can trim differently from the min and "
398 "max image edge values along X and Y axes",
399 CONTEXT, "30,30,30,30");
400 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "edges-trim");
401 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
402 cpl_parameterlist_append(self, p);
403
404
405
406 /*------------------------------------------------------------------------*/
407 /* PHOTOM PARAMETERS */
408 /*------------------------------------------------------------------------*/
409
410
411 p = cpl_parameter_new_enum(CONTEXT".cdssearch_photom",
412 CPL_TYPE_STRING,
413 "CDS photometric catalogue",
414 CONTEXT,
415 "none", 2, "none", "2mass");
416 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "cdssearch_photom");
417 cpl_parameterlist_append(self, p);
418
419 /* parameter list for object catalogue generation */
420
421 hdrl_parameter_delete(catalogue_defaults);
422 cpl_parameterlist_delete(catalogue_parlist);
423 catalogue_defaults = hdrl_catalogue_parameter_create(4, 2.5, CPL_TRUE,
424 10.0, CPL_TRUE, 64, 2.0, 3.0,
425 ERIS_NIX_SATURATION_DEFAULT, HDRL_CATALOGUE_ALL);
426 catalogue_parlist = hdrl_catalogue_parameter_create_parlist(CONTEXT,
427 "catalogue", catalogue_defaults);
428 for (p = cpl_parameterlist_get_first(catalogue_parlist);
429 p != NULL;
430 p = cpl_parameterlist_get_next(catalogue_parlist)) {
431
432 const char * pname = cpl_parameter_get_name(p);
433 if (strstr(pname, "minmax") == NULL) {
434 cpl_parameter * duplicate = cpl_parameter_duplicate(p);
435 cpl_parameterlist_append(self, duplicate);
436 }
437 }
438
439 /* parameters for object-catalogue matching algorithm */
440
441 /* commented out for now. This method is not reliable at present,
442 better to insist on a good wcs calibration then match single
443 standard with brightest object within pixel-radius*/
444 /*
445 p = cpl_parameter_new_value(CONTEXT".assoc_radius",
446 CPL_TYPE_DOUBLE,
447 "Max distance between object and catalogue "
448 "entry for association (arcsec)",
449 CONTEXT, 0.5);
450 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "assoc-radius");
451 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
452 cpl_parameterlist_append(self, p);
453
454 p = cpl_parameter_new_value(CONTEXT".isolation_radius",
455 CPL_TYPE_DOUBLE,
456 "Min distance between object and nearest "
457 "neighbour for it to be 'isolated' (arcsec)",
458 CONTEXT, 1.0);
459 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "isolation-radius");
460 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
461 cpl_parameterlist_append(self, p);
462 */
463
464 p = cpl_parameter_new_value(CONTEXT".pixel_radius",
465 CPL_TYPE_DOUBLE,
466 "Max. distance between object and catalogue "
467 "entry for association (pixels)",
468 CONTEXT, 5.0);
469 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "pixel-radius");
470 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
471 cpl_parameterlist_append(self, p);
472
473 p = cpl_parameter_new_range(CONTEXT".minphotom",
474 CPL_TYPE_INT,
475 "Min number of matched stars for photometric "
476 "calibration", CONTEXT, 1, 1, 100000);
477 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "minphotom");
478 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
479 cpl_parameterlist_append(self, p);
480
481 p = cpl_parameter_new_value(CONTEXT".magerrcut",
482 CPL_TYPE_DOUBLE,
483 "Matched stars with magnitude error above "
484 "this cutoff will not be used.",
485 CONTEXT, 0.5);
486 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "magerrcut");
487 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
488 cpl_parameterlist_append(self, p);
489
490
491 p = cpl_parameter_new_value(CONTEXT".esoformat",
492 CPL_TYPE_BOOL,
493 "TRUE to output MEF file conforming to ESO standard",
494 "background, catalogue components",
495 CONTEXT, CPL_FALSE);
496 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "esoformat");
497 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
498 cpl_parameterlist_append(self, p);
499
500
501 /*------------------------------------------------------------------------*/
502 /* HDRL-STACK PARAMETERS */
503 /*------------------------------------------------------------------------*/
504 /* The lower rejection threshold to be used during stacking */
505 /*
506 p = cpl_parameter_new_range(CONTEXT".stk_lthr", CPL_TYPE_DOUBLE,
507 "Low rejection threshold", CONTEXT,
508 5.0, 1.0e-6, 1.0e10);
509 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "stk-lthr");
510 cpl_parameterlist_append(self, p);
511 */
512 /* The upper rejection threshold to be used during stacking */
513 /*
514 p = cpl_parameter_new_range(CONTEXT".stk_hthr", CPL_TYPE_DOUBLE,
515 "Upper rejection threshold", CONTEXT,
516 5.0, 1.0e-6, 1.0e10);
517 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "stk-hthr");
518 cpl_parameterlist_append(self, p);
519 */
520 /* Interpolation method */
521
522 p = cpl_parameter_new_enum(CONTEXT".interpolation_method",
523 CPL_TYPE_STRING, "The interpolation method",
524 CONTEXT, "lanczos", 6, "nearest",
525 "linear", "quadratic", "renka", "drizzle",
526 "lanczos");
527 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
528 "interpolation-method");
529 cpl_parameterlist_append(self, p);
530
531 /* Loop distance */
532
533 p = cpl_parameter_new_value(CONTEXT".loop_distance", CPL_TYPE_INT,
534 "maximum pixel offset taken into account",
535 CONTEXT, 1);
536 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "loop-distance");
537 cpl_parameterlist_append(self, p);
538
539 /* Kernel size */
540
541 p = cpl_parameter_new_value(CONTEXT".kernel_size", CPL_TYPE_INT,
542 "(Lanczos method) size of kernel in pixels",
543 CONTEXT, 2);
544 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "kernel-size");
545 cpl_parameterlist_append(self, p);
546
547 /* Critical radius */
548
549 p = cpl_parameter_new_value(CONTEXT".critical_radius", CPL_TYPE_DOUBLE,
550 "(Renka method) distance beyond which weights "
551 "set to 0",
552 CONTEXT, 5.0);
553 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "critical-radius");
554 cpl_parameterlist_append(self, p);
555
556 /* Drizzle frac parameters */
557
558 p = cpl_parameter_new_value(CONTEXT".pix_frac_x", CPL_TYPE_DOUBLE,
559 "(Drizzle method) percentage of flux "
560 "to drizzle from original to target pixel",
561 CONTEXT, 50.0);
562 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "pix-frac-x");
563 cpl_parameterlist_append(self, p);
564 p = cpl_parameter_new_value(CONTEXT".pix_frac_y", CPL_TYPE_DOUBLE,
565 "(Drizzle method) percentage of flux "
566 "to drizzle from original to target pixel",
567 CONTEXT, 50.0);
568 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "pix-frac-y");
569 cpl_parameterlist_append(self, p);
570
571 /* generate the general parameter list for the catalogue */
572
573 hdrl_parameter_delete(catalogue_defaults);
574 cpl_parameterlist_delete(catalogue_parlist);
575 catalogue_defaults = hdrl_catalogue_parameter_create(4, 2.5, CPL_TRUE,
576 10.0, CPL_TRUE, 64, 2.0, 3.0,
577 ERIS_NIX_SATURATION_DEFAULT, HDRL_CATALOGUE_ALL);
578 catalogue_parlist = hdrl_catalogue_parameter_create_parlist(CONTEXT,
579 "catalogue", catalogue_defaults);
580
581 /* add the subset of parameters to be used */
582
583 for (p = cpl_parameterlist_get_first(catalogue_parlist);
584 p != NULL;
585 p = cpl_parameterlist_get_next(catalogue_parlist)) {
586
587 const char * pname = cpl_parameter_get_name(p);
588 if (strstr(pname, "minmax") == NULL) {
589 cpl_parameter * duplicate = cpl_parameter_duplicate(p);
590 cpl_parameterlist_append(self, duplicate);
591 }
592 }
593
594 p = cpl_parameter_new_value(CONTEXT".debug-data",
595 CPL_TYPE_BOOL, "true to save interim results",
596 CONTEXT, CPL_FALSE);
597 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "debug-data");
598 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
599 cpl_parameterlist_append(self, p);
600
601
602 /* tidy up */
603
604 hdrl_parameter_delete(catalogue_defaults);
605 cpl_parameterlist_delete(catalogue_parlist);
606
607
608 return 0;
609}
610
611
612/*----------------------------------------------------------------------------*/
619/*----------------------------------------------------------------------------*/
620
621static int eris_nix_img_scired(cpl_frameset * frameset,
622 const cpl_parameterlist * parlist) {
623
624 /* preliminary check to handle cube format: in that case skip following data
625 * reduction */
626 cpl_frame* frame = NULL;
627 frame = cpl_frameset_find(frameset,ERIS_NIX_RAW_OBJECT_JITTER_DO_CATG);
628 cpl_boolean is_format_single = CPL_TRUE;
629 if(frame != NULL) {
630 cpl_propertylist* plist = NULL;
631 const char* fname = cpl_frame_get_filename(frame);
632
633 plist = cpl_propertylist_load(fname, 0);
634 const char* key = "ESO DET FRAM FORMAT";
635 if (cpl_propertylist_has(plist, key)) {
636 const char* format = cpl_propertylist_get_string(plist, key);
637 if(strcmp(format, "cube") == 0) {
638 is_format_single = CPL_FALSE;
639 }
640 }
641
642 }
643
644 eris_nix_scired_cal_det(frameset, parlist, RECIPE_NAME, CONTEXT);
645 if(is_format_single) {
646 eris_nix_scired_skysub(frameset, parlist, RECIPE_NAME, CONTEXT);
647 eris_nix_scired_cal_wcs(frameset, parlist, RECIPE_NAME, CONTEXT);
648 eris_nix_scired_cal_phot(frameset, parlist, RECIPE_NAME, CONTEXT);
649 eris_nix_scired_hdrl_stack(frameset, parlist, RECIPE_NAME, CONTEXT);
650 }
651
652 return (int) cpl_error_get_code();
653}
cpl_error_code eris_nix_scired_hdrl_stack(cpl_frameset *frameset, const cpl_parameterlist *parlist, const char *recipe_name, const char *context)
This rebin and stack a set of calibrated ERIS/NIX jitter frames.
cpl_error_code eris_nix_scired_cal_phot(cpl_frameset *frameset, const cpl_parameterlist *parlist, const char *recipe_name, const char *context)
This recipe calibrates the photometry of ERIS/NIX frames.
cpl_error_code eris_nix_scired_cal_det(cpl_frameset *frameset, const cpl_parameterlist *parlist, const char *recipe_name, const char *context)
This function removes the detector signature from science frames.
cpl_error_code eris_nix_scired_skysub(cpl_frameset *frameset, const cpl_parameterlist *parlist, const char *recipe_name, const char *context)
This recipe estimates and subtracts the sky background from a set of science frames.
cpl_error_code eris_nix_scired_cal_wcs(cpl_frameset *frameset, const cpl_parameterlist *parlist, const char *recipe_name, const char *context)
This recipe calibrates the astrometry of ERIS/NIX frames.
hdrl_parameter * hdrl_catalogue_parameter_create(int obj_min_pixels, double obj_threshold, cpl_boolean obj_deblending, double obj_core_radius, cpl_boolean bkg_estimate, int bkg_mesh_size, double bkg_smooth_fwhm, double det_eff_gain, double det_saturation, hdrl_catalogue_options resulttype)
Creates catalogue Parameters object.
cpl_parameterlist * hdrl_catalogue_parameter_create_parlist(const char *base_context, const char *prefix, hdrl_parameter *defaults)
Create parameter list for the catalogue computation.
void hdrl_parameter_delete(hdrl_parameter *obj)
shallow delete of a parameter