30 #include "iiinstrument_utils.h"
31 #include "iiinstrument_pfits.h"
32 #include "iiinstrument_dfs.h"
42 #define RECIPE_NAME "rrrecipe"
43 #define CONTEXT "iiinstrument."RECIPE_NAME
63 static const char rrrecipe_description[] =
64 "This example text is used to describe the recipe.\n"
65 "The description should include the required FITS-files and\n"
66 "their associated tags, e.g.\n"
67 "IIINSTRUMENT-RRRECIPE-raw-file.fits " RRRECIPE_RAW
"\n"
68 "and any optional files, e.g.\n"
69 "IIINSTRUMENT-RRRECIPE-flat-file.fits " IIINSTRUMENT_CALIB_FLAT
"\n"
71 "Additionally, it should describe functionality of the expected output."
75 cpl_recipe_define( rrrecipe,
76 IIINSTRUMENT_BINARY_VERSION,
81 rrrecipe_description);
109 cpl_frameset * frameset,
110 const cpl_parameterlist * parlist)
112 const cpl_parameter *param;
113 const char *str_option;
115 const cpl_frame *rawframe;
116 const cpl_frame *flat;
118 cpl_propertylist *plist;
119 cpl_propertylist *applist;
124 return cpl_error_get_code();
129 cpl_errorstate prestate = cpl_errorstate_get();
135 param = cpl_parameterlist_find_const(parlist, CONTEXT
".str_option");
136 str_option = cpl_parameter_get_string(param);
139 param = cpl_parameterlist_find_const(parlist, CONTEXT
".bool_option");
140 bool_option = cpl_parameter_get_bool(param);
142 if (!cpl_errorstate_is_equal(prestate)) {
143 return cpl_error_set_message(cpl_func, cpl_error_get_code(),
144 "Could not retrieve the input parameters");
151 rawframe = cpl_frameset_find_const(frameset, RRRECIPE_RAW);
152 if (rawframe == NULL) {
155 return cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
156 "SOF does not have any file tagged with %s", RRRECIPE_RAW);
160 flat = cpl_frameset_find(frameset, IIINSTRUMENT_CALIB_FLAT);
162 cpl_msg_warning(cpl_func,
"SOF does not have any file tagged with %s",
163 IIINSTRUMENT_CALIB_FLAT);
169 plist = cpl_propertylist_load_regexp(cpl_frame_get_filename(rawframe),
173 return cpl_error_set_message(cpl_func, cpl_error_get_code(),
174 "Could not read the FITS header");
177 if (bool_option == CPL_FALSE) {
178 cpl_msg_info(cpl_func,
"Bool option unset: String: %s", str_option);
182 cpl_propertylist_delete(plist);
187 cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
193 image = cpl_image_load(cpl_frame_get_filename(rawframe), CPL_TYPE_FLOAT, 0,
196 return cpl_error_set_message(cpl_func, cpl_error_get_code(),
197 "Could not load the image");
200 applist = cpl_propertylist_new();
203 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG,
204 RRRECIPE_OUT_PROCATG);
207 cpl_propertylist_append_double(applist,
"ESO QC QCPARAM", qc_param);
211 if (cpl_dfs_save_image(frameset, NULL, parlist, frameset, NULL, image,
212 CPL_BPP_IEEE_FLOAT, RECIPE_NAME, applist,
213 NULL, PACKAGE
"/" PACKAGE_VERSION,
216 (void)cpl_error_set_where(cpl_func);
221 cpl_image_delete(image);
222 cpl_propertylist_delete(applist);
225 return cpl_error_get_code();
240 static cpl_error_code rrrecipe_fill_parameterlist(
241 cpl_parameterlist *
self)
244 cpl_errorstate prestate = cpl_errorstate_get();
250 par = cpl_parameter_new_value(CONTEXT
".str_option",
251 CPL_TYPE_STRING,
"the string option",
253 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"stropt");
254 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
255 cpl_parameterlist_append(
self, par);
258 par = cpl_parameter_new_value(CONTEXT
".file_option",
259 CPL_TYPE_STRING,
"the file option",
261 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"fileopt");
262 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
263 cpl_parameterlist_append(
self, par);
266 par = cpl_parameter_new_value(CONTEXT
".bool_option",
267 CPL_TYPE_BOOL,
"a flag",
269 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"boolopt");
270 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
271 cpl_parameterlist_append(
self, par);
274 par = cpl_parameter_new_value(CONTEXT
".int_option",
275 CPL_TYPE_INT,
"an integer",
277 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"intopt");
278 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
279 cpl_parameterlist_append(
self, par);
282 par = cpl_parameter_new_value(CONTEXT
".float_option", CPL_TYPE_DOUBLE,
285 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"floatopt");
286 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
287 cpl_parameterlist_append(
self, par);
290 par = cpl_parameter_new_range(CONTEXT
".range_option", CPL_TYPE_INT,
291 "This is a value range of type int",
293 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"rangeopt");
294 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
295 cpl_parameterlist_append(
self, par);
298 par = cpl_parameter_new_enum(CONTEXT
".enum_option", CPL_TYPE_STRING,
299 "This is an enumeration of type string",
300 CONTEXT,
"first", 3,
"first",
"second",
"third");
301 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"enumopt");
302 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
303 cpl_parameterlist_append(
self, par);
306 par = cpl_parameter_new_range(CONTEXT
".float_range_option", CPL_TYPE_DOUBLE,
307 "This is a value range of type float."
308 " Valid ragne is [-5.5, 5.5]",
309 CONTEXT, 3.5, -5.5, 5.5);
310 cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
"floatrangeopt");
311 cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
312 cpl_parameterlist_append(
self, par);
316 if (!cpl_errorstate_is_equal(prestate)) {
317 return cpl_error_set_message(cpl_func, cpl_error_get_code(),
318 "rrrecipe_fill_parameterlist failed!");
321 return CPL_ERROR_NONE;
double iiinstrument_pfits_get_dit(const cpl_propertylist *plist)
find out the DIT value
cpl_error_code iiinstrument_check_and_set_groups(cpl_frameset *frameset)
check the entries in the recipe and classify the frameset with the tags