35 #include "muse_exp_combine_z.h"
52 static const char *muse_exp_combine_help =
53 "Sort reduced pixel tables, one per exposure, by exposure and combine them with applied weights into one final datacube.";
55 static const char *muse_exp_combine_help_esorex =
56 "\n\nInput frames for raw frame tag \"PIXTABLE_REDUCED\":\n"
57 "\n Frame tag Type Req #Fr Description"
58 "\n -------------------- ---- --- --- ------------"
59 "\n PIXTABLE_REDUCED raw Y >=2 Input pixel tables"
60 "\n FILTER_LIST calib . 1 File to be used to create field-of-view images."
61 "\n OUTPUT_WCS calib . 1 WCS to override output cube location / dimensions"
62 "\n\nProduct frames for raw frame tag \"PIXTABLE_REDUCED\":\n"
63 "\n Frame tag Level Description"
64 "\n -------------------- -------- ------------"
65 "\n DATACUBE_FINAL final Output datacube (if --save contains \"cube\")"
66 "\n IMAGE_FOV final Field-of-view images corresponding to the \"filter\" parameter (if --save contains \"cube\")."
67 "\n PIXTABLE_COMBINED intermed Combined pixel table (if --save contains \"combined\")";
78 static cpl_recipeconfig *
79 muse_exp_combine_new_recipeconfig(
void)
81 cpl_recipeconfig *recipeconfig = cpl_recipeconfig_new();
84 tag =
"PIXTABLE_REDUCED";
85 cpl_recipeconfig_set_tag(recipeconfig, tag, 2, -1);
86 cpl_recipeconfig_set_input(recipeconfig, tag,
"FILTER_LIST", -1, 1);
87 cpl_recipeconfig_set_input(recipeconfig, tag,
"OUTPUT_WCS", -1, 1);
88 cpl_recipeconfig_set_output(recipeconfig, tag,
"DATACUBE_FINAL");
89 cpl_recipeconfig_set_output(recipeconfig, tag,
"IMAGE_FOV");
90 cpl_recipeconfig_set_output(recipeconfig, tag,
"PIXTABLE_COMBINED");
106 static cpl_error_code
107 muse_exp_combine_prepare_header(
const char *aFrametag, cpl_propertylist *aHeader)
109 cpl_ensure_code(aFrametag, CPL_ERROR_NULL_INPUT);
110 cpl_ensure_code(aHeader, CPL_ERROR_NULL_INPUT);
111 if (!strcmp(aFrametag,
"DATACUBE_FINAL")) {
114 "[pix] Position of source k in x-direction in combined frame");
117 "[pix] Position of source k in y-direction in combined frame");
120 "[arcsec] FWHM of source k in x-direction in combined frame");
123 "[arcsec] FWHM of source k in y-direction in combined frame");
124 }
else if (!strcmp(aFrametag,
"IMAGE_FOV")) {
125 }
else if (!strcmp(aFrametag,
"PIXTABLE_COMBINED")) {
127 cpl_msg_warning(__func__,
"Frame tag %s is not defined", aFrametag);
128 return CPL_ERROR_ILLEGAL_INPUT;
130 return CPL_ERROR_NONE;
143 static cpl_frame_level
144 muse_exp_combine_get_frame_level(
const char *aFrametag)
147 return CPL_FRAME_LEVEL_NONE;
149 if (!strcmp(aFrametag,
"DATACUBE_FINAL")) {
150 return CPL_FRAME_LEVEL_FINAL;
152 if (!strcmp(aFrametag,
"IMAGE_FOV")) {
153 return CPL_FRAME_LEVEL_FINAL;
155 if (!strcmp(aFrametag,
"PIXTABLE_COMBINED")) {
156 return CPL_FRAME_LEVEL_INTERMEDIATE;
158 return CPL_FRAME_LEVEL_NONE;
172 muse_exp_combine_get_frame_mode(
const char *aFrametag)
177 if (!strcmp(aFrametag,
"DATACUBE_FINAL")) {
180 if (!strcmp(aFrametag,
"IMAGE_FOV")) {
183 if (!strcmp(aFrametag,
"PIXTABLE_COMBINED")) {
201 muse_exp_combine_create(cpl_plugin *aPlugin)
205 if (cpl_plugin_get_type(aPlugin) == CPL_PLUGIN_TYPE_RECIPE) {
206 recipe = (cpl_recipe *)aPlugin;
214 muse_exp_combine_new_recipeconfig(),
215 muse_exp_combine_prepare_header,
216 muse_exp_combine_get_frame_level,
217 muse_exp_combine_get_frame_mode);
222 cpl_msg_set_time_on();
226 recipe->parameters = cpl_parameterlist_new();
231 p = cpl_parameter_new_value(
"muse.muse_exp_combine.save",
233 "Select output product(s) to save. Can contain one or more of \"cube\" (output cube and associated images; if this is not given, no resampling is done at all) or \"combined\" (fully reduced and combined pixel table for the full set of exposures; this is useful, if the final resampling step is to be done again separately). If several options are given, they have to be comma-separated.",
234 "muse.muse_exp_combine",
235 (
const char *)
"cube");
236 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"save");
237 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"save");
239 cpl_parameterlist_append(recipe->parameters, p);
242 p = cpl_parameter_new_enum(
"muse.muse_exp_combine.resample",
244 "The resampling technique to use for the final output cube.",
245 "muse.muse_exp_combine",
246 (
const char *)
"drizzle",
248 (
const char *)
"nearest",
249 (
const char *)
"linear",
250 (
const char *)
"quadratic",
251 (
const char *)
"renka",
252 (
const char *)
"drizzle",
253 (
const char *)
"lanczos");
254 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"resample");
255 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"resample");
257 cpl_parameterlist_append(recipe->parameters, p);
260 p = cpl_parameter_new_value(
"muse.muse_exp_combine.dx",
262 "Horizontal step size for resampling (in arcsec or pixel). The following defaults are taken when this value is set to 0.0: 0.2'' for WFM, 0.075'' for NFM, 1.0 if data is in pixel units.",
263 "muse.muse_exp_combine",
265 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"dx");
266 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"dx");
268 cpl_parameterlist_append(recipe->parameters, p);
271 p = cpl_parameter_new_value(
"muse.muse_exp_combine.dy",
273 "Vertical step size for resampling (in arcsec or pixel). The following defaults are taken when this value is set to 0.0: 0.2'' for WFM, 0.075'' for NFM, 1.0 if data is in pixel units.",
274 "muse.muse_exp_combine",
276 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"dy");
277 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"dy");
279 cpl_parameterlist_append(recipe->parameters, p);
282 p = cpl_parameter_new_value(
"muse.muse_exp_combine.dlambda",
284 "Wavelength step size (in Angstrom). Natural instrument sampling is used, if this is 0.0",
285 "muse.muse_exp_combine",
287 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"dlambda");
288 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"dlambda");
290 cpl_parameterlist_append(recipe->parameters, p);
293 p = cpl_parameter_new_enum(
"muse.muse_exp_combine.crtype",
295 "Type of statistics used for detection of cosmic rays during final resampling. \"iraf\" uses the variance information, \"mean\" uses standard (mean/stdev) statistics, \"median\" uses median and the median median of the absolute median deviation.",
296 "muse.muse_exp_combine",
297 (
const char *)
"median",
299 (
const char *)
"iraf",
300 (
const char *)
"mean",
301 (
const char *)
"median");
302 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"crtype");
303 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"crtype");
305 cpl_parameterlist_append(recipe->parameters, p);
308 p = cpl_parameter_new_value(
"muse.muse_exp_combine.crsigma",
310 "Sigma rejection factor to use for cosmic ray rejection during final resampling. A zero or negative value switches cosmic ray rejection off.",
311 "muse.muse_exp_combine",
313 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"crsigma");
314 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"crsigma");
316 cpl_parameterlist_append(recipe->parameters, p);
319 p = cpl_parameter_new_value(
"muse.muse_exp_combine.rc",
321 "Critical radius for the \"renka\" resampling method.",
322 "muse.muse_exp_combine",
324 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"rc");
325 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"rc");
327 cpl_parameterlist_append(recipe->parameters, p);
330 p = cpl_parameter_new_value(
"muse.muse_exp_combine.pixfrac",
332 "Pixel down-scaling factor for the \"drizzle\" resampling method.",
333 "muse.muse_exp_combine",
335 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"pixfrac");
336 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"pixfrac");
338 cpl_parameterlist_append(recipe->parameters, p);
341 p = cpl_parameter_new_value(
"muse.muse_exp_combine.ld",
343 "Number of adjacent pixels to take into account during resampling in all three directions (loop distance); this affects all resampling methods except \"nearest\".",
344 "muse.muse_exp_combine",
346 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"ld");
347 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"ld");
349 cpl_parameterlist_append(recipe->parameters, p);
352 p = cpl_parameter_new_enum(
"muse.muse_exp_combine.format",
354 "Type of output file format, \"Cube\" is a standard FITS cube with NAXIS=3 and multiple extensions (for data and variance). The extended \"x\" formats include the reconstructed image(s) in FITS image extensions within the same file.",
355 "muse.muse_exp_combine",
356 (
const char *)
"Cube",
358 (
const char *)
"Cube",
359 (
const char *)
"Euro3D",
360 (
const char *)
"xCube",
361 (
const char *)
"xEuro3D");
362 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"format");
363 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"format");
365 cpl_parameterlist_append(recipe->parameters, p);
368 p = cpl_parameter_new_enum(
"muse.muse_exp_combine.weight",
370 "Type of weighting scheme to use when combining multiple exposures. \"exptime\" just uses the exposure time to weight the exposures, \"fwhm\" uses the DIMM information in the header as well, \"none\" preserves an existing weight column in the input pixel tables without changes.",
371 "muse.muse_exp_combine",
372 (
const char *)
"exptime",
374 (
const char *)
"exptime",
375 (
const char *)
"fwhm",
376 (
const char *)
"none");
377 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"weight");
378 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"weight");
380 cpl_parameterlist_append(recipe->parameters, p);
383 p = cpl_parameter_new_value(
"muse.muse_exp_combine.filter",
385 "The filter name(s) to be used for the output field-of-view image. Each name has to correspond to an EXTNAME in an extension of the FILTER_LIST file. If an unsupported filter name is given, creation of the respective image is omitted. If multiple filter names are given, they have to be comma separated.",
386 "muse.muse_exp_combine",
387 (
const char *)
"white");
388 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"filter");
389 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"filter");
391 cpl_parameterlist_append(recipe->parameters, p);
394 p = cpl_parameter_new_value(
"muse.muse_exp_combine.lambdamin",
396 "Cut off the data below this wavelength after loading the pixel table(s).",
397 "muse.muse_exp_combine",
399 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"lambdamin");
400 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"lambdamin");
402 cpl_parameterlist_append(recipe->parameters, p);
405 p = cpl_parameter_new_value(
"muse.muse_exp_combine.lambdamax",
407 "Cut off the data above this wavelength after loading the pixel table(s).",
408 "muse.muse_exp_combine",
410 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CFG,
"lambdamax");
411 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"lambdamax");
413 cpl_parameterlist_append(recipe->parameters, p);
433 cpl_ensure_code(aParams, CPL_ERROR_NULL_INPUT);
434 cpl_ensure_code(aParameters, CPL_ERROR_NULL_INPUT);
437 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.save");
438 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
439 aParams->
save = cpl_parameter_get_string(p);
441 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.resample");
442 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
443 aParams->
resample_s = cpl_parameter_get_string(p);
445 (!strcasecmp(aParams->
resample_s,
"nearest")) ? MUSE_EXP_COMBINE_PARAM_RESAMPLE_NEAREST :
446 (!strcasecmp(aParams->
resample_s,
"linear")) ? MUSE_EXP_COMBINE_PARAM_RESAMPLE_LINEAR :
447 (!strcasecmp(aParams->
resample_s,
"quadratic")) ? MUSE_EXP_COMBINE_PARAM_RESAMPLE_QUADRATIC :
448 (!strcasecmp(aParams->
resample_s,
"renka")) ? MUSE_EXP_COMBINE_PARAM_RESAMPLE_RENKA :
449 (!strcasecmp(aParams->
resample_s,
"drizzle")) ? MUSE_EXP_COMBINE_PARAM_RESAMPLE_DRIZZLE :
450 (!strcasecmp(aParams->
resample_s,
"lanczos")) ? MUSE_EXP_COMBINE_PARAM_RESAMPLE_LANCZOS :
451 MUSE_EXP_COMBINE_PARAM_RESAMPLE_INVALID_VALUE;
452 cpl_ensure_code(aParams->
resample != MUSE_EXP_COMBINE_PARAM_RESAMPLE_INVALID_VALUE,
453 CPL_ERROR_ILLEGAL_INPUT);
455 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.dx");
456 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
457 aParams->
dx = cpl_parameter_get_double(p);
459 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.dy");
460 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
461 aParams->
dy = cpl_parameter_get_double(p);
463 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.dlambda");
464 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
465 aParams->
dlambda = cpl_parameter_get_double(p);
467 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.crtype");
468 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
469 aParams->
crtype_s = cpl_parameter_get_string(p);
471 (!strcasecmp(aParams->
crtype_s,
"iraf")) ? MUSE_EXP_COMBINE_PARAM_CRTYPE_IRAF :
472 (!strcasecmp(aParams->
crtype_s,
"mean")) ? MUSE_EXP_COMBINE_PARAM_CRTYPE_MEAN :
473 (!strcasecmp(aParams->
crtype_s,
"median")) ? MUSE_EXP_COMBINE_PARAM_CRTYPE_MEDIAN :
474 MUSE_EXP_COMBINE_PARAM_CRTYPE_INVALID_VALUE;
475 cpl_ensure_code(aParams->
crtype != MUSE_EXP_COMBINE_PARAM_CRTYPE_INVALID_VALUE,
476 CPL_ERROR_ILLEGAL_INPUT);
478 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.crsigma");
479 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
480 aParams->
crsigma = cpl_parameter_get_double(p);
482 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.rc");
483 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
484 aParams->
rc = cpl_parameter_get_double(p);
486 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.pixfrac");
487 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
488 aParams->
pixfrac = cpl_parameter_get_double(p);
490 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.ld");
491 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
492 aParams->
ld = cpl_parameter_get_int(p);
494 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.format");
495 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
496 aParams->
format_s = cpl_parameter_get_string(p);
498 (!strcasecmp(aParams->
format_s,
"Cube")) ? MUSE_EXP_COMBINE_PARAM_FORMAT_CUBE :
499 (!strcasecmp(aParams->
format_s,
"Euro3D")) ? MUSE_EXP_COMBINE_PARAM_FORMAT_EURO3D :
500 (!strcasecmp(aParams->
format_s,
"xCube")) ? MUSE_EXP_COMBINE_PARAM_FORMAT_XCUBE :
501 (!strcasecmp(aParams->
format_s,
"xEuro3D")) ? MUSE_EXP_COMBINE_PARAM_FORMAT_XEURO3D :
502 MUSE_EXP_COMBINE_PARAM_FORMAT_INVALID_VALUE;
503 cpl_ensure_code(aParams->
format != MUSE_EXP_COMBINE_PARAM_FORMAT_INVALID_VALUE,
504 CPL_ERROR_ILLEGAL_INPUT);
506 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.weight");
507 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
508 aParams->
weight_s = cpl_parameter_get_string(p);
510 (!strcasecmp(aParams->
weight_s,
"exptime")) ? MUSE_EXP_COMBINE_PARAM_WEIGHT_EXPTIME :
511 (!strcasecmp(aParams->
weight_s,
"fwhm")) ? MUSE_EXP_COMBINE_PARAM_WEIGHT_FWHM :
512 (!strcasecmp(aParams->
weight_s,
"none")) ? MUSE_EXP_COMBINE_PARAM_WEIGHT_NONE :
513 MUSE_EXP_COMBINE_PARAM_WEIGHT_INVALID_VALUE;
514 cpl_ensure_code(aParams->
weight != MUSE_EXP_COMBINE_PARAM_WEIGHT_INVALID_VALUE,
515 CPL_ERROR_ILLEGAL_INPUT);
517 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.filter");
518 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
519 aParams->
filter = cpl_parameter_get_string(p);
521 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.lambdamin");
522 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
523 aParams->
lambdamin = cpl_parameter_get_double(p);
525 p = cpl_parameterlist_find(aParameters,
"muse.muse_exp_combine.lambdamax");
526 cpl_ensure_code(p, CPL_ERROR_DATA_NOT_FOUND);
527 aParams->
lambdamax = cpl_parameter_get_double(p);
541 muse_exp_combine_exec(cpl_plugin *aPlugin)
543 if (cpl_plugin_get_type(aPlugin) != CPL_PLUGIN_TYPE_RECIPE) {
546 cpl_recipe *recipe = (cpl_recipe *)aPlugin;
547 cpl_msg_set_threadid_on();
549 cpl_frameset *usedframes = cpl_frameset_new(),
550 *outframes = cpl_frameset_new();
552 muse_exp_combine_params_fill(¶ms, recipe->parameters);
554 cpl_errorstate prestate = cpl_errorstate_get();
558 int rc = muse_exp_combine_compute(proc, ¶ms);
559 cpl_frameset_join(usedframes, proc->
usedframes);
560 cpl_frameset_join(outframes, proc->
outframes);
563 if (!cpl_errorstate_is_equal(prestate)) {
567 cpl_msg_set_level(CPL_MSG_INFO);
578 cpl_frameset_join(recipe->frames, usedframes);
579 cpl_frameset_join(recipe->frames, outframes);
580 cpl_frameset_delete(usedframes);
581 cpl_frameset_delete(outframes);
594 muse_exp_combine_destroy(cpl_plugin *aPlugin)
598 if (cpl_plugin_get_type(aPlugin) == CPL_PLUGIN_TYPE_RECIPE) {
599 recipe = (cpl_recipe *)aPlugin;
605 cpl_parameterlist_delete(recipe->parameters);
622 cpl_plugin_get_info(cpl_pluginlist *aList)
624 cpl_recipe *recipe = cpl_calloc(1,
sizeof *recipe);
625 cpl_plugin *plugin = &recipe->interface;
629 helptext = cpl_sprintf(
"%s%s", muse_exp_combine_help,
630 muse_exp_combine_help_esorex);
632 helptext = cpl_sprintf(
"%s", muse_exp_combine_help);
636 cpl_plugin_init(plugin, CPL_PLUGIN_API, MUSE_BINARY_VERSION,
637 CPL_PLUGIN_TYPE_RECIPE,
639 "Combine several exposures into one datacube.",
644 muse_exp_combine_create,
645 muse_exp_combine_exec,
646 muse_exp_combine_destroy);
647 cpl_pluginlist_append(aList, plugin);
void muse_processing_delete(muse_processing *aProcessing)
Free the muse_processing structure.
int ld
Number of adjacent pixels to take into account during resampling in all three directions (loop distan...
const char * crtype_s
Type of statistics used for detection of cosmic rays during final resampling. "iraf" uses the varianc...
const char * resample_s
The resampling technique to use for the final output cube. (as string)
muse_cplframework_type muse_cplframework(void)
Return the CPL framework the recipe is run under.
double crsigma
Sigma rejection factor to use for cosmic ray rejection during final resampling. A zero or negative va...
const char * format_s
Type of output file format, "Cube" is a standard FITS cube with NAXIS=3 and multiple extensions (for ...
int format
Type of output file format, "Cube" is a standard FITS cube with NAXIS=3 and multiple extensions (for ...
cpl_frameset * usedframes
muse_processing * muse_processing_new(const char *aName, cpl_recipe *aRecipe)
Create a new processing structure.
double dy
Vertical step size for resampling (in arcsec or pixel). The following defaults are taken when this va...
double pixfrac
Pixel down-scaling factor for the "drizzle" resampling method.
const char * muse_get_license(void)
Get the pipeline copyright and license.
Structure to hold the parameters of the muse_exp_combine recipe.
const char * weight_s
Type of weighting scheme to use when combining multiple exposures. "exptime" just uses the exposure t...
int crtype
Type of statistics used for detection of cosmic rays during final resampling. "iraf" uses the varianc...
double lambdamax
Cut off the data above this wavelength after loading the pixel table(s).
int weight
Type of weighting scheme to use when combining multiple exposures. "exptime" just uses the exposure t...
const char * filter
The filter name(s) to be used for the output field-of-view image. Each name has to correspond to an E...
void muse_cplerrorstate_dump_some(unsigned aCurrent, unsigned aFirst, unsigned aLast)
Dump some CPL errors.
void muse_processinginfo_delete(cpl_recipe *)
Clear all information from the processing info and from the recipe config.
int resample
The resampling technique to use for the final output cube.
double lambdamin
Cut off the data below this wavelength after loading the pixel table(s).
const char * save
Select output product(s) to save. Can contain one or more of "cube" (output cube and associated image...
double dlambda
Wavelength step size (in Angstrom). Natural instrument sampling is used, if this is 0...
double dx
Horizontal step size for resampling (in arcsec or pixel). The following defaults are taken when this ...
cpl_error_code muse_cplframeset_erase_duplicate(cpl_frameset *aFrames)
Erase all duplicate frames from a frameset.
cpl_error_code muse_cplframeset_erase_all(cpl_frameset *aFrames)
Erase all frames in a frameset.
double rc
Critical radius for the "renka" resampling method.
void muse_processinginfo_register(cpl_recipe *, cpl_recipeconfig *, muse_processing_prepare_header_func *, muse_processing_get_frame_level_func *, muse_processing_get_frame_mode_func *)
Register extended functionalities for MUSE recipes.
cpl_error_code muse_processing_prepare_property(cpl_propertylist *, const char *, cpl_type, const char *)
Prepare and check the specified property.