41 #include "gravi_utils.h"
42 #include "gravi_pfits.h"
43 #include "gravi_dfs.h"
44 #include "gravi_calib.h"
46 #include "gravi_data.h"
54 static int gravi_all_p2vm_create(cpl_plugin *);
55 static int gravi_all_p2vm_exec(cpl_plugin *);
56 static int gravi_all_p2vm_destroy(cpl_plugin *);
57 static int gravi_all_p2vm(cpl_frameset *,
const cpl_parameterlist *);
63 static char gravi_all_p2vm_description[] =
64 "This recipe is used to compute the p2vm matrix.\n"
65 "The given output FITS file contain a p2vm table with "
66 "the values of the transmission, phase and coherence extract "
67 "using the p2vm matrix \n"
68 "The description should include the required FITS-files and\n"
69 "their associated tags, e.g.\n"
71 "Description DO category\n"
73 "Raw p2vm files " GRAVI_P2VM
"\n"
74 "Raw wave file (one file) " GRAVI_WAVE
"\n"
75 "Raw dark file " GRAVI_DARK
"\n"
77 "Master dark " DARK
"\n"
78 "Profile map " FLAT
"\n"
79 "Bad pixel map " BAD
"\n"
80 "Master wave (one file) " WAVE
"\n"
82 "Master wave (one file) " WAVE
"\n"
83 "Profile map (if there is raw flat files in the input) " FLAT
"\n"
84 "Master dark (if there is raw dark file in the input) " DARK
"\n"
85 "Bad pixel map (if there is not bad pixel map in the input) " BAD
"\n"
88 "Additionally, it should describe functionality of the expected output."
106 int cpl_plugin_get_info(cpl_pluginlist * list)
108 cpl_recipe * recipe = cpl_calloc(1,
sizeof *recipe );
109 cpl_plugin * plugin = &recipe->interface;
111 if (cpl_plugin_init(plugin,
113 GRAVI_BINARY_VERSION,
114 CPL_PLUGIN_TYPE_RECIPE,
116 "This recipe is used to compute p2vm matrix",
117 gravi_all_p2vm_description,
118 "Firstname Lastname",
121 gravi_all_p2vm_create,
123 gravi_all_p2vm_destroy)) {
124 cpl_msg_error(cpl_func,
"Plugin initialization failed");
125 (void)cpl_error_set_where(cpl_func);
129 if (cpl_pluginlist_append(list, plugin)) {
130 cpl_msg_error(cpl_func,
"Error adding plugin to list");
131 (void)cpl_error_set_where(cpl_func);
147 static int gravi_all_p2vm_create(cpl_plugin * plugin)
153 if (cpl_error_get_code() != CPL_ERROR_NONE) {
154 cpl_msg_error(cpl_func,
"%s():%d: An error is already set: %s",
155 cpl_func, __LINE__, cpl_error_get_where());
156 return (
int)cpl_error_get_code();
159 if (plugin == NULL) {
160 cpl_msg_error(cpl_func,
"Null plugin");
161 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
165 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
166 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
167 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
171 recipe = (cpl_recipe *)plugin;
174 recipe->parameters = cpl_parameterlist_new();
175 if (recipe->parameters == NULL) {
176 cpl_msg_error(cpl_func,
"Parameter list allocation failed");
177 cpl_ensure_code(0, (
int)CPL_ERROR_ILLEGAL_OUTPUT);
183 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.preproc_file",
184 CPL_TYPE_BOOL,
"Save the preproc file",
"gravi.gravi_all_p2vm", FALSE);
185 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"preprocfile");
186 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
187 cpl_parameterlist_append(recipe->parameters, p);
190 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.opd_met",
191 CPL_TYPE_BOOL,
"extract the real opd from the metrology",
192 "gravi.gravi_all_p2vm", TRUE);
193 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"extmetrology");
194 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
195 cpl_parameterlist_append(recipe->parameters, p);
198 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.min_wave",
199 CPL_TYPE_DOUBLE,
"the minimum wavelength",
"gravi.gravi_all_p2vm", 2.0);
200 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"lambdamin");
201 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
202 cpl_parameterlist_append(recipe->parameters, p);
205 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.max_wave",
206 CPL_TYPE_DOUBLE,
"the maximum wavelength",
"gravi.gravi_all_p2vm", 2.6);
207 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"lambdamax");
208 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
209 cpl_parameterlist_append(recipe->parameters, p);
212 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.readoutSC",
213 CPL_TYPE_DOUBLE,
"the readout error sigma SC",
"gravi.gravi_all_p2vm", 1.0);
214 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"sigma_readout_SC");
215 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
216 cpl_parameterlist_append(recipe->parameters, p);
219 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.readoutFT",
220 CPL_TYPE_DOUBLE,
"the readout error sigma FT",
"gravi.gravi_all_p2vm", 1.0);
221 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"sigma_readout_FT");
222 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
223 cpl_parameterlist_append(recipe->parameters, p);
226 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.nspectrum_FT",
227 CPL_TYPE_INT,
"the number of the spectral in the FT data",
"gravi.gravi_all_p2vm", 5);
228 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"nlambda_ft");
229 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
230 cpl_parameterlist_append(recipe->parameters, p);
233 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.nspectrum_SC",
234 CPL_TYPE_INT,
"the number of the spectral in the SC data",
"gravi.gravi_all_p2vm", 5);
235 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"nlambda_sc");
236 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
237 cpl_parameterlist_append(recipe->parameters, p);
240 p = cpl_parameter_new_value(
"gravi.gravi_all_flat."
241 "profile_width", CPL_TYPE_INT,
"profile width option",
242 "gravi.gravi_all_flat", 5);
243 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"profile_width");
244 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
245 cpl_parameterlist_append(recipe->parameters, p);
248 p = cpl_parameter_new_value(
"gravi.gravi_all_p2vm.preproc_param.correction",
249 CPL_TYPE_STRING,
"the background correction",
"gravi.gravi_all_p2vm",
"DARK");
250 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"background");
251 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
252 cpl_parameterlist_append(recipe->parameters, p);
254 p = cpl_parameter_new_value(
"gravi."
255 "flat_param.Bad_dark_threshold", CPL_TYPE_INT,
"the rms factor for "
256 "dark bad pixel threshold",
"gravi.gravi_all_flat", 5);
257 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"Bad_dark_threshold");
258 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
259 cpl_parameterlist_append(recipe->parameters, p);
271 static int gravi_all_p2vm_exec(cpl_plugin * plugin)
276 cpl_errorstate initial_errorstate = cpl_errorstate_get();
279 if (cpl_error_get_code() != CPL_ERROR_NONE) {
280 cpl_msg_error(cpl_func,
"%s():%d: An error is already set: %s",
281 cpl_func, __LINE__, cpl_error_get_where());
282 return (
int)cpl_error_get_code();
285 if (plugin == NULL) {
286 cpl_msg_error(cpl_func,
"Null plugin");
287 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
291 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
292 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
293 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
297 recipe = (cpl_recipe *)plugin;
300 if (recipe->parameters == NULL) {
301 cpl_msg_error(cpl_func,
"Recipe invoked with NULL parameter list");
302 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
304 if (recipe->frames == NULL) {
305 cpl_msg_error(cpl_func,
"Recipe invoked with NULL frame set");
306 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
310 recipe_status = gravi_all_p2vm(recipe->frames, recipe->parameters);
313 if (cpl_dfs_update_product_header(recipe->frames)) {
314 if (!recipe_status) recipe_status = (int)cpl_error_get_code();
317 if (!cpl_errorstate_is_equal(initial_errorstate)) {
320 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
323 return recipe_status;
333 static int gravi_all_p2vm_destroy(cpl_plugin * plugin)
337 if (plugin == NULL) {
338 cpl_msg_error(cpl_func,
"Null plugin");
339 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
343 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
344 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
345 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
349 recipe = (cpl_recipe *)plugin;
351 cpl_parameterlist_delete(recipe->parameters);
365 static int gravi_all_p2vm(cpl_frameset * frameset,
366 const cpl_parameterlist * parlist)
368 cpl_frameset * p2vm_frameset, * wavecalib_frameset, * darkcalib_frameset,
369 * gaincalib_frameset, * dark_frameset, * wave_frameset,
370 * badpix_frameset, * gain_frameset, * preproc_frameset, *norma_frameset;
371 cpl_propertylist * applist, * primary_hdr, * primary_hdr_dark, * p2vm_plist,
372 * primary_hdr_wave, * bad_primary_hdr, * profile_primary_hdr, * plist;
374 const cpl_parameter * p;
375 char * out_dark, * out_wave, * preproc_name, * out_gain;
376 const char * filename, * origin, * acq_start;
377 gravi_data * p2vm_data, * data, * dark_map, * wave_map,
378 * profile_map, * badpix_map;
379 gravi_data ** calib_datas;
380 gravi_data * preproc_data;
381 gravi_data ** raw_data;
382 dark_map = NULL, wave_map = NULL;
383 int nb_frame, i, nb_frame_gain, j;
385 double gain_ft, gain_sc, mjd_obs, acq_mjd;
387 cpl_table * p2vm_met = NULL, * metrology_table, * opl_table = NULL, * detector_table,
389 cpl_propertylist * met_plist;
390 cpl_frameset * preproc_frame;
391 int ** valid_trans = cpl_malloc (2 *
sizeof (
int*));
394 int ** valid_CP = cpl_malloc (2 *
sizeof (
int*)), type_data;
395 int n_tel = 4, n_wave, n_region;
396 cpl_propertylist * oiwave_plist;
397 int met_check = 1, def_p2vm = 1;
398 cpl_propertylist * p2vm_primary_hdr;
401 for (i = 0 ; i < 2; i++){
402 valid_trans[i] = cpl_calloc (4,
sizeof (
int));
403 valid_CP[i] = cpl_calloc (6,
sizeof (
int));
412 cpl_ensure_code(gravi_dfs_set_groups(frameset) == CPL_ERROR_NONE,
413 cpl_error_get_code()) ;
415 norma_frameset = gravi_frameset_extract_norma(frameset);
417 if (cpl_frameset_is_empty(norma_frameset)) {
419 preproc_frameset = gravi_frameset_extract_preproc(frameset);
421 if (cpl_frameset_is_empty(preproc_frameset)) {
423 p2vm_frameset = gravi_frameset_extract_p2vm_data(frameset);
424 wavecalib_frameset = gravi_frameset_extract_wave_file(frameset);
425 darkcalib_frameset = gravi_frameset_extract_dark_file(frameset);
426 gaincalib_frameset = gravi_frameset_extract_flat_file(frameset);
427 wave_frameset = gravi_frameset_extract_wave(frameset);
428 dark_frameset = gravi_frameset_extract_dark(frameset);
429 gain_frameset = gravi_frameset_extract_flat(frameset);
430 badpix_frameset = gravi_frameset_extract_badpix(frameset);
431 if (cpl_frameset_is_empty(p2vm_frameset)) {
434 cpl_frameset_delete(dark_frameset);
435 cpl_frameset_delete(wave_frameset);
436 cpl_frameset_delete(gain_frameset);
437 cpl_frameset_delete(p2vm_frameset);
438 cpl_frameset_delete(wavecalib_frameset);
439 cpl_frameset_delete(wavecalib_frameset);
440 cpl_frameset_delete(gaincalib_frameset);
441 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
442 "No p2vm frame on the frameset") ;
448 if (!cpl_frameset_is_empty(dark_frameset)) {
449 frame = cpl_frameset_get_position(dark_frameset, 0);
451 filename = cpl_frame_get_filename(frame);
452 cpl_msg_info (NULL,
"This file %s is a dark file", filename);
453 data = gravi_data_load(filename);
454 primary_hdr = gravi_data_get_propertylist(data,
455 GRAVI_PRIMARY_HDR_NAME_EXT);
456 shutter = gravi_shutters_check(primary_hdr);
457 if (!((shutter[0] == 0) && (shutter[1] == 0) && (shutter[2] == 0)
458 && (shutter[3] == 0))){
459 cpl_frameset_delete(dark_frameset);
460 cpl_frameset_delete(wave_frameset);
461 cpl_frameset_delete(gain_frameset);
462 cpl_frameset_delete(darkcalib_frameset);
463 cpl_frameset_delete(wavecalib_frameset);
464 cpl_frameset_delete(gaincalib_frameset);
465 cpl_frameset_delete(p2vm_frameset);
466 gravi_data_delete(data);
467 return (
int)cpl_error_set_message(cpl_func,
468 CPL_ERROR_ILLEGAL_OUTPUT,
"Shutter problem");
472 dark_map = gravi_compute_dark(data);
473 if (cpl_error_get_code()) {
474 cpl_frameset_delete(dark_frameset);
475 cpl_frameset_delete(wave_frameset);
476 cpl_frameset_delete(gain_frameset);
477 cpl_frameset_delete(darkcalib_frameset);
478 cpl_frameset_delete(wavecalib_frameset);
479 cpl_frameset_delete(gaincalib_frameset);
480 gravi_data_delete(dark_map);
481 cpl_frameset_delete(p2vm_frameset);
482 cpl_propertylist_delete(applist);
483 gravi_data_delete(data);
484 return (
int)cpl_error_set_message(cpl_func,
485 CPL_ERROR_ILLEGAL_OUTPUT,
486 "Error while computing the dark_map");
490 cpl_frameset_insert(darkcalib_frameset, cpl_frame_duplicate(frame));
491 primary_hdr_dark = gravi_data_get_propertylist(dark_map,
492 GRAVI_PRIMARY_HDR_NAME_EXT);
493 applist = gravi_propertylist_get_qc (primary_hdr_dark);
497 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG,
503 out_dark =
"gravi_final_dark.fits";
505 if (gravi_data_save(dark_map, frameset, out_dark, parlist,
506 darkcalib_frameset, frame,
"gravi_all_p2vm", applist)
508 cpl_frameset_delete(dark_frameset);
509 cpl_frameset_delete(wave_frameset);
510 cpl_frameset_delete(gain_frameset);
511 cpl_frameset_delete(darkcalib_frameset);
512 cpl_frameset_delete(wavecalib_frameset);
513 cpl_frameset_delete(gaincalib_frameset);
514 gravi_data_delete(dark_map);
515 cpl_frameset_delete(p2vm_frameset);
516 cpl_propertylist_delete(applist);
517 gravi_data_delete(data);
519 return (
int) cpl_error_set_message(cpl_func,
520 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the dark_map"
521 " on the output file");
523 cpl_propertylist_delete(applist);
524 gravi_data_delete(data);
528 else if (!cpl_frameset_is_empty(darkcalib_frameset)){
529 frame = cpl_frameset_get_position(darkcalib_frameset, 0);
530 cpl_frameset_insert (dark_frameset, cpl_frame_duplicate (frame));
531 filename = cpl_frame_get_filename(frame);
533 cpl_msg_info (NULL,
"This file %s is a dark file already "
534 "computed", filename);
535 dark_map = gravi_data_load(filename);
541 cpl_frameset_delete(dark_frameset);
542 cpl_frameset_delete(wave_frameset);
543 cpl_frameset_delete(gain_frameset);
544 cpl_frameset_delete(p2vm_frameset);
545 cpl_frameset_delete(darkcalib_frameset);
546 cpl_frameset_delete(wavecalib_frameset);
547 cpl_frameset_delete(gaincalib_frameset);
548 gravi_data_delete(dark_map);
549 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
550 "No dark frames in the frameset");
556 if (!cpl_frameset_is_empty(badpix_frameset)){
557 frame = cpl_frameset_get_position(badpix_frameset, 0);
558 filename = cpl_frame_get_filename(frame);
559 cpl_msg_info (NULL,
"This file %s is a bad pixel map", filename);
561 badpix_map = gravi_data_load(filename);
565 badpix_map = gravi_compute_badpix(dark_map, parlist);
567 if (cpl_error_get_code()) {
568 gravi_data_delete(badpix_map);
569 cpl_frameset_delete(dark_frameset);
570 cpl_frameset_delete(wave_frameset);
571 cpl_frameset_delete(gain_frameset);
572 cpl_frameset_delete(p2vm_frameset);
573 cpl_frameset_delete(darkcalib_frameset);
574 cpl_frameset_delete(wavecalib_frameset);
575 cpl_frameset_delete(gaincalib_frameset);
576 gravi_data_delete(dark_map);
577 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
578 "Error while computing the bad pixel map");
582 bad_primary_hdr = gravi_data_get_propertylist (badpix_map,
583 GRAVI_PRIMARY_HDR_NAME_EXT);
584 applist = gravi_propertylist_get_qc (bad_primary_hdr);
586 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, BAD);
588 frame = cpl_frameset_get_position (dark_frameset, 0);
590 if (gravi_data_save (badpix_map, frameset,
"gravi_bad_map.fits", parlist,
591 dark_frameset, frame,
"gravi_all_flat", applist)
594 gravi_data_delete(badpix_map);
595 cpl_frameset_delete(dark_frameset);
596 cpl_frameset_delete(wave_frameset);
597 cpl_frameset_delete(gain_frameset);
598 cpl_frameset_delete(p2vm_frameset);
599 cpl_frameset_delete(darkcalib_frameset);
600 cpl_frameset_delete(wavecalib_frameset);
601 cpl_frameset_delete(gaincalib_frameset);
602 cpl_frameset_delete(badpix_frameset);
603 gravi_data_delete(dark_map);
604 return (
int) cpl_error_set_message(cpl_func,
605 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the bad pixel map");
607 cpl_propertylist_delete (applist);
611 cpl_frameset_delete(darkcalib_frameset);
612 cpl_frameset_delete(dark_frameset);
613 cpl_frameset_delete(badpix_frameset);
616 if (cpl_error_get_code()){
617 cpl_frameset_delete(p2vm_frameset);
618 cpl_frameset_delete(wavecalib_frameset);
619 cpl_frameset_delete(wave_frameset);
620 cpl_frameset_delete(gain_frameset);
621 gravi_data_delete(badpix_map);
622 gravi_data_delete(dark_map);
623 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
624 "Compute of the gain failed");
627 if ((!cpl_frameset_is_empty(gain_frameset)) &&
628 (cpl_frameset_is_empty(gaincalib_frameset)) ) {
630 nb_frame_gain = cpl_frameset_get_size (gain_frameset);
631 raw_data = cpl_malloc(nb_frame_gain *
sizeof(gravi_data *));
635 for (i = 0; i < nb_frame_gain; i++){
636 frame = cpl_frameset_get_position(gain_frameset, i);
637 filename = cpl_frame_get_filename(frame);
638 raw_data[i] = gravi_data_load(filename);
639 primary_hdr = gravi_data_get_propertylist(raw_data[i],
640 GRAVI_PRIMARY_HDR_NAME_EXT);
641 shutter = gravi_shutters_check(primary_hdr);
649 profile_map = gravi_compute_profile(raw_data, dark_map, badpix_map,
650 nb_frame_gain, parlist);
652 if (cpl_error_get_code()){
653 cpl_frameset_delete(p2vm_frameset);
654 cpl_frameset_delete(wavecalib_frameset);
655 cpl_frameset_delete(wave_frameset);
656 cpl_frameset_delete(gain_frameset);
657 gravi_data_delete(profile_map);
658 gravi_data_delete(dark_map);
659 for (i = 0; i < nb_frame_gain; i++){
660 gravi_data_delete(raw_data[i]);
663 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
664 "Compute of the profile map failed");
667 gain_sc = gravi_compute_gain(raw_data, nb_frame_gain, dark_map,
668 GRAVI_IMAGING_DATA_SC_EXT);
669 gain_ft = gravi_compute_gain(raw_data, nb_frame_gain, dark_map,
670 GRAVI_IMAGING_DATA_FT_EXT);
672 profile_primary_hdr = gravi_data_get_propertylist(profile_map,
673 GRAVI_PRIMARY_HDR_NAME_EXT);
675 applist = gravi_propertylist_get_qc (profile_primary_hdr);
676 cpl_propertylist_append_double (applist, QC_MEANGAIN_FT, gain_ft);
677 cpl_propertylist_append_double (applist, QC_MEANGAIN_SC, gain_sc);
679 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, FLAT);
681 out_gain =
"gravi_final_profile.fits";
682 frame = cpl_frameset_get_position(gain_frameset, 0);
683 if (gravi_data_save(profile_map, frameset, out_gain, parlist,
684 gain_frameset, frame,
"gravi_all_p2vm", applist)
687 cpl_frameset_delete(wavecalib_frameset);
688 cpl_frameset_delete(gaincalib_frameset);
689 cpl_frameset_delete(wave_frameset);
690 cpl_frameset_delete(gain_frameset);
691 for (i = 0; i < nb_frame_gain; i++){
692 gravi_data_delete(raw_data[i]);
695 gravi_data_delete(dark_map);
696 gravi_data_delete(profile_map);
697 cpl_frameset_delete(p2vm_frameset);
698 cpl_propertylist_delete(applist);
700 return (
int) cpl_error_set_message(cpl_func,
701 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the profile_map"
702 " on the output file");
704 cpl_propertylist_delete(applist);
706 for (i = 0; i < nb_frame_gain; i++){
707 gravi_data_delete(raw_data[i]);
714 frame = cpl_frameset_get_position (gaincalib_frameset, 0);
716 filename = cpl_frame_get_filename(frame);
717 cpl_msg_info (NULL,
"This file %s is a flat file already "
718 "computed", filename);
719 profile_map = gravi_data_load(filename);
723 cpl_frameset_delete(gaincalib_frameset);
724 cpl_frameset_delete(gain_frameset);
730 p = cpl_parameterlist_find_const(parlist,
"gravi.gravi_all_p2vm."
732 if ((!cpl_frameset_is_empty(wave_frameset)) &&
733 (cpl_frameset_is_empty(wavecalib_frameset))) {
734 frame = cpl_frameset_get_position(wave_frameset, 0);
736 filename = cpl_frame_get_filename(frame);
737 cpl_msg_info (NULL,
"This file %s is a wave file", filename);
738 data = gravi_data_load(filename);
739 primary_hdr = gravi_data_get_propertylist(data,
740 GRAVI_PRIMARY_HDR_NAME_EXT);
741 shutter = gravi_shutters_check(primary_hdr);
742 if (!((shutter[0] == 1) && (shutter[1] == 1) && (shutter[2] == 1)
743 && (shutter[3] == 1))){
744 cpl_frameset_delete(wavecalib_frameset);
745 cpl_frameset_delete(wave_frameset);
746 gravi_data_delete(dark_map);
747 cpl_frameset_delete(p2vm_frameset);
748 gravi_data_delete(data);
749 gravi_data_delete(profile_map);
750 return (
int)cpl_error_set_message(cpl_func,
751 CPL_ERROR_ILLEGAL_OUTPUT,
"Shutter problem");
757 if ((cpl_parameter_get_bool (p)) && (met_check)){
763 metrology_table = gravi_data_get_table(data,
764 GRAVI_METROLOGY_EXT);
765 met_plist = cpl_propertylist_duplicate (gravi_data_get_propertylist(data,
766 GRAVI_METROLOGY_EXT));
768 acq_start = gravi_pfits_get_acq_start (primary_hdr);
770 acq_mjd = gravi_convert_to_mjd (acq_start);
772 opl_table = cpl_table_new (cpl_table_get_nrow(metrology_table));
774 p2vm_met = gravi_metrology_calibration (metrology_table,
777 printf (
"Temps gravi_metrology_calibration : %f\n", (end - start) / (
double)CLOCKS_PER_SEC);
778 if (cpl_error_get_code()) {
780 gravi_data_delete(badpix_map);
781 cpl_frameset_delete(wavecalib_frameset);
782 cpl_frameset_delete(wave_frameset);
783 gravi_data_delete(dark_map);
784 gravi_data_delete(wave_map);
785 cpl_frameset_delete(p2vm_frameset);
786 gravi_data_delete(data);
787 gravi_data_delete(profile_map);
788 cpl_propertylist_delete (met_plist);
789 cpl_table_delete(p2vm_met);
790 cpl_table_delete(opl_table);
792 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
793 "Error while computing p2vm of the metrology");
799 wave_map = gravi_compute_wave(data, profile_map, dark_map, badpix_map,
802 cpl_table_delete (opl_table);
804 if (cpl_error_get_code()) {
805 cpl_frameset_delete(wavecalib_frameset);
806 cpl_frameset_delete(wave_frameset);
807 gravi_data_delete(dark_map);
808 gravi_data_delete(wave_map);
809 cpl_frameset_delete(p2vm_frameset);
810 gravi_data_delete(data);
811 gravi_data_delete(profile_map);
812 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
813 "Error while computing the wave_map");
817 primary_hdr_wave = gravi_data_get_propertylist(wave_map,
818 GRAVI_PRIMARY_HDR_NAME_EXT);
819 applist = gravi_propertylist_get_qc (primary_hdr_wave);
823 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG,
829 out_wave =
"gravi_final_wave.fits";
830 if (gravi_data_save(wave_map, frameset, out_wave, parlist,
831 wave_frameset, frame,
"gravi_all_p2vm", applist)
834 cpl_frameset_delete(wavecalib_frameset);
835 cpl_frameset_delete(wave_frameset);
836 gravi_data_delete(dark_map);
837 gravi_data_delete(wave_map);
838 cpl_frameset_delete(p2vm_frameset);
839 cpl_propertylist_delete(applist);
840 gravi_data_delete(data);
841 gravi_data_delete(profile_map);
842 return (
int) cpl_error_set_message(cpl_func,
843 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the wave_map"
844 " on the output file");
847 cpl_propertylist_delete(applist);
849 gravi_data_delete(data);
855 frame = cpl_frameset_get_position(wavecalib_frameset, 0);
857 filename = cpl_frame_get_filename(frame);
859 cpl_msg_info (NULL,
"This file %s is a wave file already "
860 "computed", filename);
861 wave_map = gravi_data_load(filename);
867 if (wave_map == NULL){
868 cpl_frameset_delete(p2vm_frameset);
869 cpl_frameset_delete(wavecalib_frameset);
870 cpl_frameset_delete(wave_frameset);
871 gravi_data_delete(wave_map);
872 gravi_data_delete(profile_map);
873 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
874 "No wave frames in the frameset");
877 if ((gravi_data_has_extension (wave_map, GRAVI_P2VM_MET_EXT)) && (met_check)){
878 met_plist = cpl_propertylist_duplicate (
879 gravi_data_get_propertylist (wave_map, GRAVI_P2VM_MET_EXT));
880 p2vm_met = cpl_table_duplicate (
881 gravi_data_get_table (wave_map, GRAVI_P2VM_MET_EXT));
885 cpl_frameset_delete(wavecalib_frameset);
886 cpl_frameset_delete(wave_frameset);
888 calib_datas = cpl_malloc(4 *
sizeof(gravi_data *));
889 calib_datas[0] = dark_map;
890 calib_datas[1] = wave_map;
891 calib_datas[2] = profile_map;
892 calib_datas[3] = badpix_map;
895 nb_frame = cpl_frameset_get_size(p2vm_frameset);
897 p = cpl_parameterlist_find_const(parlist,
"gravi.gravi_all_p2vm."
898 "preproc_param.preproc_file");
900 for (i = 0; i < nb_frame; i++){
901 frame = cpl_frameset_get_position(p2vm_frameset, i);
902 filename = cpl_frame_get_filename(frame);
903 cpl_msg_info (NULL,
"Calibration of this file %s", filename);
904 data = gravi_data_load(filename);
905 primary_hdr = gravi_data_get_propertylist(data,
906 GRAVI_PRIMARY_HDR_NAME_EXT);
907 origin = gravi_pfits_get_origin (primary_hdr);
908 shutter = gravi_shutters_check(primary_hdr);
909 if ((shutter[0] == 1) && (shutter[1] == 1) && (shutter[2] == 1)
910 && (shutter[3] == 1) && (met_check)){
913 cpl_msg_info (NULL,
"Compute the p2vm of the metrology %s", filename);
914 metrology_table = gravi_data_get_table(data,
915 GRAVI_METROLOGY_EXT);
917 if ((p2vm_met == NULL)){
919 met_plist = cpl_propertylist_duplicate (gravi_data_get_propertylist(data,
920 GRAVI_METROLOGY_EXT));
922 acq_start = gravi_pfits_get_acq_start (primary_hdr);
924 acq_mjd = gravi_convert_to_mjd (acq_start);
926 opl_table = cpl_table_new (cpl_table_get_nrow(metrology_table));
928 p2vm_met = gravi_metrology_calibration (metrology_table,
931 printf (
"Temps gravi_metrology_calibration : %f\n", (end - start) / (
double)CLOCKS_PER_SEC);
932 if (cpl_error_get_code()) {
933 cpl_frameset_delete(p2vm_frameset);
934 cpl_free(calib_datas);
935 gravi_data_delete(dark_map);
936 gravi_data_delete(wave_map);
937 gravi_data_delete(profile_map);
938 gravi_data_delete(data);
939 cpl_table_delete (opl_table);
940 cpl_table_delete (p2vm_met);
942 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
943 "Error while computing p2vm of the metrology");
950 gravi_data_delete (data);
957 preproc_data = gravi_preproc(data, calib_datas, 4, parlist);
959 cpl_msg_info (NULL,
"Temps gravi_preproc %s : %f", filename, (end - start) / (
double)CLOCKS_PER_SEC);
960 gravi_data_delete(data);
961 if (cpl_error_get_code()) {
962 cpl_frameset_delete(p2vm_frameset);
963 gravi_data_delete(preproc_data);
964 cpl_free(calib_datas);
965 gravi_data_delete(dark_map);
966 gravi_data_delete(wave_map);
967 gravi_data_delete(profile_map);
968 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
969 "Error while computing the preproc data_map");
975 cpl_msg_info (NULL,
"Construction of the p2vm map");
976 p2vm_data = gravi_data_new(0);
977 p2vm_primary_hdr = cpl_propertylist_new ();
979 for (j = 0; j < gravi_data_get_size (preproc_data); j++){
980 plist = gravi_data_get_propertylist_x (preproc_data, j);
981 const char * plist_name = gravi_pfits_get_extname (plist);
982 if (plist_name == NULL)
985 type_data = gravi_pfits_get_extension_type (plist);
987 if (!(strcmp (plist_name, INS_DESCRIPTION) &&
988 strcmp (plist_name, INS_TRAIN) &&
989 strcmp (plist_name, GRAVI_IMAGING_DETECTOR_FT_EXT) &&
990 strcmp (plist_name, GRAVI_IMAGING_DETECTOR_SC_EXT) &&
991 strcmp (plist_name, GRAVI_IO_WAVELENGTH_FT_EXT) &&
992 strcmp (plist_name, GRAVI_IO_WAVELENGTH_SC_EXT))){
994 gravi_data_add (p2vm_data, plist,
995 gravi_data_get_table (preproc_data, plist_name));
996 else if (type_data == 3)
997 gravi_data_add_cube (p2vm_data, plist,
998 gravi_data_get_cube (preproc_data, plist_name));
1001 detector_table = gravi_data_get_table (preproc_data,
1002 GRAVI_IMAGING_DETECTOR_SC_EXT);
1003 oiwave_plist = gravi_data_get_propertylist
1004 (preproc_data, GRAVI_IO_WAVELENGTH_SC_EXT);
1007 n_wave = gravi_pfits_get_nwave(oiwave_plist);
1008 n_region = cpl_table_get_nrow(detector_table);
1010 p2vm_table = gravi_p2vm_new(n_region, n_wave, n_tel);
1011 plist = cpl_propertylist_new();
1013 cpl_propertylist_append_string(plist,
"ORIGIN", origin);
1014 cpl_propertylist_append_int(plist,
"NREGION", n_region);
1015 cpl_propertylist_append_int(plist,
"NWAVE", n_wave);
1016 cpl_propertylist_append_string(plist,
"EXTNAME", GRAVI_P2VM_DATA_SC_EXT);
1018 gravi_data_add (p2vm_data, plist, p2vm_table);
1019 cpl_table_delete (p2vm_table);
1021 detector_table = gravi_data_get_table (preproc_data,
1022 GRAVI_IMAGING_DETECTOR_FT_EXT);
1023 oiwave_plist = gravi_data_get_propertylist
1024 (preproc_data, GRAVI_IO_WAVELENGTH_FT_EXT);
1027 n_wave = gravi_pfits_get_nwave(oiwave_plist);
1028 n_region = cpl_table_get_nrow(detector_table);
1029 p2vm_table = gravi_p2vm_new(n_region, n_wave, n_tel);
1031 cpl_propertylist_set_int(plist,
"NREGION", n_region);
1032 cpl_propertylist_set_int(plist,
"NWAVE", n_wave);
1033 cpl_propertylist_set_string(plist,
"EXTNAME", GRAVI_P2VM_DATA_FT_EXT);
1036 gravi_data_add (p2vm_data, plist, p2vm_table);
1038 gravi_data_set_propertylist (p2vm_data, GRAVI_PRIMARY_HDR_NAME_EXT,
1040 cpl_propertylist_delete(p2vm_primary_hdr);
1043 cpl_propertylist_delete (plist);
1044 cpl_table_delete (p2vm_table);
1049 if (gravi_compute_p2vm (p2vm_data, preproc_data, 0, valid_trans, valid_CP)
1052 cpl_frameset_delete(p2vm_frameset);
1054 gravi_data_delete(preproc_data);
1055 cpl_free(calib_datas);
1056 gravi_data_delete(dark_map);
1057 gravi_data_delete(wave_map);
1058 gravi_data_delete(profile_map);
1059 gravi_data_delete (p2vm_data);
1060 return (
int) cpl_error_set_message(cpl_func,
1061 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the p2vm_map"
1062 " on the output file");
1075 if (cpl_parameter_get_bool(p)){
1076 preproc_frame = cpl_frameset_new ();
1077 cpl_frameset_insert (preproc_frame, cpl_frame_duplicate (frame));
1078 preproc_name = cpl_sprintf(
"gravi_preproc_%s", filename);
1080 applist = gravi_propertylist_get_qc (gravi_data_get_propertylist
1081 (preproc_data, GRAVI_PRIMARY_HDR_NAME_EXT));
1084 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, PREPROC);
1087 gravi_data_save(preproc_data, frameset, preproc_name, parlist,
1088 preproc_frame, frame,
"gravi_all_p2vm", applist);
1092 cpl_propertylist_delete (applist);
1093 cpl_frameset_delete (preproc_frame);
1094 cpl_free (preproc_name);
1098 gravi_data_delete(preproc_data);
1106 cpl_free(calib_datas);
1107 gravi_data_delete(dark_map);
1108 gravi_data_delete(wave_map);
1109 gravi_data_delete(profile_map);
1110 gravi_data_delete(badpix_map);
1116 p2vm_frameset = cpl_frameset_duplicate (preproc_frameset);
1117 nb_frame = cpl_frameset_get_size(preproc_frameset);
1121 for (i = 0; i < nb_frame; i++){
1122 frame = cpl_frameset_get_position(preproc_frameset, i);
1123 filename = cpl_frame_get_filename(frame);
1124 cpl_msg_info(NULL,
"Load of this file %s", filename);
1126 preproc_data = gravi_data_load(filename);
1128 cpl_msg_info (NULL,
"charger le fichier preproc %s : %f", filename, (end - start) / (
double)CLOCKS_PER_SEC);
1129 primary_hdr = gravi_data_get_propertylist(preproc_data,
1130 GRAVI_PRIMARY_HDR_NAME_EXT);
1131 shutter = gravi_shutters_check(primary_hdr);
1132 if ((shutter[0] == 1) && (shutter[1] == 1) && (shutter[2] == 1)
1133 && (shutter[3] == 1) && (met_check)){
1136 metrology_table = gravi_data_get_table(preproc_data,
1137 GRAVI_METROLOGY_EXT);
1139 if ((p2vm_met == NULL)){
1141 met_plist = cpl_propertylist_duplicate (gravi_data_get_propertylist(data,
1142 GRAVI_METROLOGY_EXT));
1144 acq_start = gravi_pfits_get_acq_start (primary_hdr);
1146 acq_mjd = gravi_convert_to_mjd (acq_start);
1148 opl_table = cpl_table_new (cpl_table_get_nrow(metrology_table));
1150 p2vm_met = gravi_metrology_calibration (metrology_table,
1153 printf (
"Temps gravi_metrology_calibration : %f\n", (end - start) / (
double)CLOCKS_PER_SEC);
1154 if (cpl_error_get_code()) {
1155 cpl_frameset_delete(preproc_frameset);
1156 gravi_data_delete(preproc_data);
1158 cpl_table_delete (opl_table);
1159 cpl_table_delete (p2vm_met);
1161 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
1162 "Error while computing p2vm of the metrology");
1168 gravi_data_delete (preproc_data);
1173 cpl_msg_info (NULL,
"Construction of the p2vm map");
1174 p2vm_data = gravi_data_new(0);
1175 p2vm_primary_hdr = cpl_propertylist_new ();
1177 for (j = 0; j < gravi_data_get_size (preproc_data); j++){
1178 plist = gravi_data_get_propertylist_x (preproc_data, j);
1179 const char * plist_name = gravi_pfits_get_extname (plist);
1181 type_data = gravi_pfits_get_extension_type (plist);
1183 if (!(strcmp (plist_name, INS_DESCRIPTION) &&
1184 strcmp (plist_name, INS_TRAIN) &&
1185 strcmp (plist_name, GRAVI_IMAGING_DETECTOR_FT_EXT) &&
1186 strcmp (plist_name, GRAVI_IMAGING_DETECTOR_SC_EXT) &&
1187 strcmp (plist_name, GRAVI_IO_WAVELENGTH_FT_EXT) &&
1188 strcmp (plist_name, GRAVI_IO_WAVELENGTH_SC_EXT))){
1190 gravi_data_add (p2vm_data, plist,
1191 gravi_data_get_table (preproc_data, plist_name));
1192 else if (type_data == 3)
1193 gravi_data_add_cube (p2vm_data, plist,
1194 gravi_data_get_cube (preproc_data, plist_name));
1197 detector_table = gravi_data_get_table (preproc_data,
1198 GRAVI_IMAGING_DETECTOR_SC_EXT);
1199 oiwave_plist = gravi_data_get_propertylist
1200 (preproc_data, GRAVI_IO_WAVELENGTH_SC_EXT);
1201 n_wave = gravi_pfits_get_nwave(oiwave_plist);
1202 n_region = cpl_table_get_nrow(detector_table);
1204 p2vm_table = gravi_p2vm_new(n_region, n_wave, n_tel);
1205 plist = cpl_propertylist_new();
1206 origin = gravi_pfits_get_origin (primary_hdr);
1207 cpl_propertylist_append_string(plist,
"ORIGIN", origin);
1208 cpl_propertylist_append_int(plist,
"NREGION", n_region);
1209 cpl_propertylist_append_int(plist,
"NWAVE", n_wave);
1210 cpl_propertylist_append_string(plist,
"EXTNAME", GRAVI_P2VM_DATA_SC_EXT);
1212 gravi_data_add (p2vm_data, plist, p2vm_table);
1214 cpl_table_delete (p2vm_table);
1215 detector_table = gravi_data_get_table (preproc_data,
1216 GRAVI_IMAGING_DETECTOR_FT_EXT);
1217 oiwave_plist = gravi_data_get_propertylist
1218 (preproc_data, GRAVI_IO_WAVELENGTH_FT_EXT);
1219 n_wave = gravi_pfits_get_nwave(oiwave_plist);
1220 n_region = cpl_table_get_nrow(detector_table);
1221 cpl_propertylist_set_int(plist,
"NREGION", n_region);
1222 cpl_propertylist_set_int(plist,
"NWAVE", n_wave);
1223 p2vm_table = gravi_p2vm_new(n_region, n_wave, n_tel);
1224 cpl_propertylist_set_string(plist,
"EXTNAME", GRAVI_P2VM_DATA_FT_EXT);
1226 gravi_data_add (p2vm_data, plist, p2vm_table);
1228 gravi_data_set_propertylist (p2vm_data, GRAVI_PRIMARY_HDR_NAME_EXT,
1230 cpl_propertylist_delete(p2vm_primary_hdr);
1233 cpl_propertylist_delete (plist);
1234 cpl_table_delete (p2vm_table);
1239 cpl_msg_info (NULL,
"entre les deux %s : %f", filename, (end - start) / (
double)CLOCKS_PER_SEC);
1240 if (gravi_compute_p2vm (p2vm_data, preproc_data, 0, valid_trans, valid_CP)
1243 cpl_frameset_delete(p2vm_frameset);
1244 cpl_frameset_delete(preproc_frameset);
1245 gravi_data_delete(preproc_data);
1246 gravi_data_delete (p2vm_data);
1248 for (i = 0 ; i < 2; i++){
1249 cpl_free (valid_trans[i]);
1250 cpl_free (valid_CP[i]);
1252 cpl_free (valid_trans);
1253 cpl_free (valid_CP);
1254 return (
int) cpl_error_set_message(cpl_func,
1255 CPL_ERROR_ILLEGAL_OUTPUT,
"error while computing the p2vm_map"
1256 " on the output file");
1259 cpl_msg_info (NULL,
"le p2vm de ce fichier %s : %f", filename, (start - end) / (
double)CLOCKS_PER_SEC);
1270 gravi_data_delete(preproc_data);
1278 gravi_data_save_data (p2vm_data,
"p2vm_data_norma.fits", CPL_IO_CREATE);
1296 for (i = 0 ; i < 2; i++){
1297 for (k = 0; k < 4; k++)
1298 valid_trans[i][k] = 1;
1299 for (k = 0; k < 6; k++)
1303 p2vm_frameset = cpl_frameset_duplicate (norma_frameset);
1304 preproc_frameset = cpl_frameset_duplicate (norma_frameset);
1305 frame = cpl_frameset_get_position(norma_frameset, 0);
1306 filename = cpl_frame_get_filename(frame);
1307 cpl_msg_info(NULL,
"Load of this file %s", filename);
1310 p2vm_data = gravi_data_load(filename);
1313 if (gravi_p2vm_normalisation (p2vm_data, valid_trans, valid_CP ) != CPL_ERROR_NONE) {
1314 cpl_frameset_delete(p2vm_frameset);
1315 for (i = 0 ; i < 2; i++){
1316 cpl_free (valid_trans[i]);
1317 cpl_free (valid_CP[i]);
1319 cpl_free (valid_trans);
1320 cpl_free (valid_CP);
1321 gravi_data_delete(p2vm_data);
1322 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
1323 "Error while the normalisation of the p2vm_map");
1326 cpl_msg_info (NULL,
"Temps gravi_normalisation %s : %f", filename, (end - start) / (
double)CLOCKS_PER_SEC);
1332 if (met_check == 0){
1333 cpl_propertylist_set_string (met_plist,
"EXTNAME",
1334 GRAVI_P2VM_MET_EXT);
1336 gravi_data_add (p2vm_data, met_plist, p2vm_met);
1338 cpl_table_delete (p2vm_met);
1339 cpl_propertylist_delete (met_plist);
1342 for (i = 0 ; i < 2; i++){
1343 cpl_free (valid_trans[i]);
1344 cpl_free (valid_CP[i]);
1346 cpl_free (valid_trans);
1347 cpl_free (valid_CP);
1352 p2vm_plist = gravi_data_get_propertylist(p2vm_data, GRAVI_PRIMARY_HDR_NAME_EXT);
1353 applist = gravi_propertylist_get_qc (p2vm_plist);
1355 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, P2VM);
1357 if (gravi_data_save( p2vm_data, frameset,
"gravi_final_p2vm.fits", parlist,
1358 p2vm_frameset, NULL,
"gravi_all_p2vm", applist)
1361 gravi_data_delete(p2vm_data);
1362 cpl_frameset_delete(p2vm_frameset);
1363 cpl_frameset_delete(preproc_frameset);
1364 cpl_propertylist_delete(applist);
1365 return (
int) cpl_error_set_message(cpl_func,
1366 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the p2vm_map"
1367 " on the output file");
1372 gravi_data_delete(p2vm_data);
1373 cpl_frameset_delete(p2vm_frameset);
1374 cpl_frameset_delete(preproc_frameset);
1375 cpl_frameset_delete(norma_frameset);
1376 cpl_propertylist_delete(applist);
1378 return (
int)cpl_error_get_code();