36#include "visir_recipe.h"
42#define RECIPE_STRING "visir_old_img_combine"
45#define RECIPE_KEYS_REGEXP_ALL \
46 VISIR_PFITS_REGEXP_IMG_RECOMBINE
49#define RECIPE_KEYS_REGEXP \
50 RECIPE_KEYS_REGEXP_ALL \
51 "|" VISIR_PFITS_REGEXP_COMBINE_PAF \
52 "|" VISIR_PFITS_INT_NDIT \
53 "|" VISIR_PFITS_INT_CHOP_NCYCLES \
54 "|" VISIR_PFITS_STRING_FILTER1 \
55 "|" VISIR_PFITS_STRING_FILTER2
58#define RECIPE_KEYS_REGEXP_WCS \
60 "|" IRPLIB_PFITS_WCS_REGEXP
66static cpl_error_code visir_img_combine_qc(cpl_propertylist *,
68 const irplib_framelist *,
71static cpl_error_code visir_img_combine_save(cpl_frameset *,
72 const cpl_parameterlist *,
73 const cpl_propertylist *,
81VISIR_RECIPE_DEFINE(visir_old_img_combine,
82 VISIR_PARAM_REFINE | VISIR_PARAM_XCORR |
83 VISIR_PARAM_OFFSETS | VISIR_PARAM_OBJECTS |
84 VISIR_PARAM_NODPOS | VISIR_PARAM_AUTOBPM |
85 VISIR_PARAM_GLITCH | VISIR_PARAM_PURGE |
86 VISIR_PARAM_UNION | VISIR_PARAM_REJECT |
87 VISIR_PARAM_COMBINE | VISIR_PARAM_ECCMAX |
88 VISIR_PARAM_STRIPITE | VISIR_PARAM_STRIPMOR |
90 "Old DRS detector: Images combination recipe",
91 "This recipe recombines the data observed in "
92 "chopping/nodding or\n"
93 "chopping or nodding modes into one combined image using "
95 "cross-correlation methods.\n"
96 "The files listed in the Set Of Frames (sof-file) "
98 "VISIR-observation-file.fits " VISIR_IMG_COMBINE_CNJ
" or\n"
99 "VISIR-observation-file.fits " VISIR_IMG_COMBINE_CJ
" or\n"
100 "VISIR-observation-file.fits " VISIR_IMG_COMBINE_NJ
" or\n"
101 "VISIR-observation-file.fits " VISIR_IMG_COMBINE_DJ
"\n"
103 "The corresponding primary product will have a FITS card\n"
104 "'HIERARCH ESO PRO CATG' with a value of\n"
105 VISIR_IMG_COMBINE_COMBINED_PROCATG_CNJ
" or\n"
106 VISIR_IMG_COMBINE_COMBINED_PROCATG_CJ
" or\n"
107 VISIR_IMG_COMBINE_COMBINED_PROCATG_NJ
" or\n"
108 VISIR_IMG_COMBINE_COMBINED_PROCATG_DJ
109 " and the corresponding beam-collapsed product will "
111 "'HIERARCH ESO PRO CATG' with a value of\n"
112 VISIR_IMG_COMBINE_ONEBEAM_PROCATG_CNJ
" or\n"
113 VISIR_IMG_COMBINE_ONEBEAM_PROCATG_CJ
" or\n"
114 VISIR_IMG_COMBINE_ONEBEAM_PROCATG_NJ
" or\n"
115 VISIR_IMG_COMBINE_ONEBEAM_PROCATG_DJ
117 MAN_VISIR_CALIB_BPM_IMG);
137static int visir_old_img_combine(cpl_frameset * framelist,
138 const cpl_parameterlist * parlist)
140 cpl_errorstate cleanstate = cpl_errorstate_get();
141 irplib_framelist * allframes = NULL;
142 irplib_framelist * rawframes = NULL;
143 cpl_propertylist * qclist = cpl_propertylist_new();
146 cpl_image ** combined = NULL;
147 cpl_image ** beam1 = NULL;
148 const char * procatg_combine = NULL;
149 const char * procatg_onebeam = NULL;
150 cpl_boolean drop_wcs;
151 const char * keys_regexp =
"^(" RECIPE_KEYS_REGEXP_WCS
")$";
153 const char * combine_string;
154 cpl_geom_combine combine_mode;
158 VISIR_PARAM_COMBINE);
160 bug_if (combine_string == NULL);
162 if (combine_string[0] ==
'u')
163 combine_mode = CPL_GEOM_UNION;
164 else if (combine_string[0] ==
'f')
165 combine_mode = CPL_GEOM_FIRST;
166 else if (combine_string[0] ==
'i')
167 combine_mode = CPL_GEOM_INTERSECT;
175 allframes = irplib_framelist_cast(framelist);
176 skip_if(allframes == NULL);
177 rawframes = irplib_framelist_extract_regexp(allframes,
"^("
178 VISIR_IMG_COMBINE_CNJ
"|"
179 VISIR_IMG_COMBINE_CJ
"|"
180 VISIR_IMG_COMBINE_NJ
"|"
181 VISIR_IMG_COMBINE_DJ
")$",
183 skip_if (rawframes == NULL);
184 irplib_framelist_empty(allframes);
186 skip_if( irplib_framelist_load_propertylist(rawframes, 0, 0, keys_regexp,
189 skip_if(irplib_framelist_load_propertylist_all(rawframes, 0,
"^("
190 RECIPE_KEYS_REGEXP_ALL
196 if (cpl_frameset_find(framelist, VISIR_IMG_COMBINE_DJ)) {
197 procatg_combine = VISIR_IMG_COMBINE_COMBINED_PROCATG_DJ;
198 procatg_onebeam = VISIR_IMG_COMBINE_ONEBEAM_PROCATG_DJ;
200 if (cpl_frameset_find(framelist, VISIR_IMG_COMBINE_NJ)) {
201 skip_if (procatg_combine != NULL);
202 procatg_combine = VISIR_IMG_COMBINE_COMBINED_PROCATG_NJ;
203 procatg_onebeam = VISIR_IMG_COMBINE_ONEBEAM_PROCATG_NJ;
205 if (cpl_frameset_find(framelist, VISIR_IMG_COMBINE_CJ)) {
206 skip_if (procatg_combine != NULL);
207 procatg_combine = VISIR_IMG_COMBINE_COMBINED_PROCATG_CJ;
208 procatg_onebeam = VISIR_IMG_COMBINE_ONEBEAM_PROCATG_CJ;
210 if (cpl_frameset_find(framelist, VISIR_IMG_COMBINE_CNJ)) {
211 skip_if (procatg_combine != NULL);
212 procatg_combine = VISIR_IMG_COMBINE_COMBINED_PROCATG_CNJ;
213 procatg_onebeam = VISIR_IMG_COMBINE_ONEBEAM_PROCATG_CNJ;
215 bug_if (procatg_combine == NULL);
218 badpix = irplib_frameset_find_file(framelist, VISIR_CALIB_BPM);
221 flat = irplib_frameset_find_file(framelist, VISIR_CALIB_FLAT);
225 flat, combine_mode, &drop_wcs,
228 if (combined == NULL) {
229 cpl_msg_error(cpl_func,
"Could not combine the input frames");
235 irplib_framelist_get_propertylist_const
239 irplib_error_recover(cleanstate,
"Could not collapse the beams of "
240 "the combined image");
244 skip_if(visir_img_combine_qc(qclist, drop_wcs, rawframes, combined[0]));
247 irplib_framelist_empty(rawframes);
250 cpl_msg_info(cpl_func,
"Save the combined image and contribution map");
253 skip_if(visir_img_combine_save(framelist, parlist, qclist,
254 combined[0], combined[1], NULL,
255 NULL, procatg_combine, procatg_onebeam));
257 skip_if(visir_img_combine_save(framelist, parlist, qclist,
258 combined[0], combined[1], beam1[0],
259 beam1[1], procatg_combine,
266 cpl_image_delete(combined[0]);
267 cpl_image_delete(combined[1]);
272 cpl_image_delete(beam1[0]);
273 cpl_image_delete(beam1[1]);
277 irplib_framelist_delete(allframes);
278 irplib_framelist_delete(rawframes);
279 cpl_propertylist_delete(qclist);
281 return cpl_error_get_code();
294static cpl_error_code visir_img_combine_qc(cpl_propertylist * qclist,
295 cpl_boolean drop_wcs,
296 const irplib_framelist * rawframes,
297 const cpl_image * combined)
300 const cpl_propertylist * reflist
301 = irplib_framelist_get_propertylist_const(rawframes, 0);
308 skip_if (visir_qc_append_exptime(qclist, rawframes));
311 skip_if (visir_qc_append_filter(qclist, rawframes));
316 skip_if(visir_qc_append_background(qclist, rawframes, 0, 0));
319 bg_sigma = visir_img_phot_sigma_clip(combined);
324 bug_if (cpl_propertylist_append_double(qclist,
"ESO QC BACKGD SIGMA",
328 skip_if (visir_qc_append_capa(qclist, rawframes));
331 cpl_propertylist * pcopy = cpl_propertylist_new();
332 const cpl_error_code error
333 = cpl_propertylist_copy_property_regexp(pcopy, reflist,
"^("
334 IRPLIB_PFITS_WCS_REGEXP
336 if (!error && cpl_propertylist_get_size(pcopy) > 0) {
337 cpl_msg_warning(cpl_func,
"Combined image will have no WCS "
340 cpl_propertylist_delete(pcopy);
343 bug_if(cpl_propertylist_copy_property_regexp(qclist, reflist,
"^("
344 IRPLIB_PFITS_WCS_REGEXP
350 return cpl_error_get_code();
369cpl_error_code visir_img_combine_save(cpl_frameset * self,
370 const cpl_parameterlist * parlist,
371 const cpl_propertylist * qclist,
372 const cpl_image * combined,
373 const cpl_image * contrib,
374 const cpl_image * beam1,
375 const cpl_image * beam1i,
376 const char * procat_c,
377 const char * procat_b)
379 cpl_propertylist * xtlist = cpl_propertylist_new();
382 bug_if(cpl_propertylist_append_string(xtlist,
"EXTNAME",
383 "Contribution Map"));
386 skip_if (irplib_dfs_save_image(self, parlist, self, combined,
387 CPL_BPP_IEEE_FLOAT, RECIPE_STRING, procat_c,
388 qclist, NULL, visir_pipe_id,
389 RECIPE_STRING CPL_DFS_FITS));
392 skip_if (cpl_image_save(contrib, RECIPE_STRING CPL_DFS_FITS,
393 CPL_BPP_16_UNSIGNED, xtlist, CPL_IO_EXTEND));
397 skip_if (irplib_dfs_save_image(self, parlist, self, beam1,
398 CPL_BPP_IEEE_FLOAT, RECIPE_STRING,
399 procat_b, qclist, NULL, visir_pipe_id,
400 RECIPE_STRING
"_onebeam" CPL_DFS_FITS));
403 skip_if (cpl_image_save(beam1i, RECIPE_STRING
"_onebeam" CPL_DFS_FITS,
404 CPL_BPP_8_UNSIGNED, xtlist, CPL_IO_EXTEND));
409 cpl_propertylist_delete(xtlist);
411 return cpl_error_get_code();
cpl_error_code visir_dfs_check_framelist_tag(const irplib_framelist *self)
Check the tags in a frameset (group raw only)
int visir_dfs_set_groups(cpl_frameset *set)
Set the group as RAW or CALIB in a frameset.
const char * visir_parameterlist_get_string(const cpl_parameterlist *self, const char *recipe, visir_parameter bitmask)
Retrieve the value of a VISIR string parameter.