40 #include "gravi_utils.h"
41 #include "gravi_pfits.h"
42 #include "gravi_dfs.h"
43 #include "gravi_calib.h"
45 #include "gravi_data.h"
53 static int gravi_all_wave_create(cpl_plugin *);
54 static int gravi_all_wave_exec(cpl_plugin *);
55 static int gravi_all_wave_destroy(cpl_plugin *);
56 static int gravi_all_wave(cpl_frameset *,
const cpl_parameterlist *);
62 static char gravi_all_wave_description[] =
63 "This recipe compute the effective wavelength of each element of the spectra \n"
64 "for SC and FT. It is computed from a set of raw wavelength integration with \n"
66 "The master wave frame is created.\n"
68 "Description DO category\n"
70 " Raw dark file "GRAVI_DARK
"\n"
71 " Raw flat file (4 files) "GRAVI_DARK
"\n"
72 " Raw wave file "GRAVI_WAVE
"\n"
74 " Master dark " DARK
"\n"
75 " Master flat " FLAT
"\n"
76 " Bad pixel map " BAD
"\n"
79 " Master wave " WAVE
"\n"
80 " Master dark (opt.) " DARK
"\n"
81 " Bad pixel map (opt.) " BAD
"\n"
82 " Master flat (opt.) " FLAT
"\n"
100 int cpl_plugin_get_info(cpl_pluginlist * list)
102 cpl_recipe * recipe = cpl_calloc(1,
sizeof *recipe );
103 cpl_plugin * plugin = &recipe->interface;
105 if (cpl_plugin_init(plugin,
107 GRAVI_BINARY_VERSION,
108 CPL_PLUGIN_TYPE_RECIPE,
110 "This recipe reduce the raw wavelength calibration file.",
111 gravi_all_wave_description,
112 "Firstname Lastname",
115 gravi_all_wave_create,
117 gravi_all_wave_destroy)) {
118 cpl_msg_error(cpl_func,
"Plugin initialization failed");
119 (void)cpl_error_set_where(cpl_func);
123 if (cpl_pluginlist_append(list, plugin)) {
124 cpl_msg_error(cpl_func,
"Error adding plugin to list");
125 (void)cpl_error_set_where(cpl_func);
141 static int gravi_all_wave_create(cpl_plugin * plugin)
147 if (cpl_error_get_code() != CPL_ERROR_NONE) {
148 cpl_msg_error(cpl_func,
"%s():%d: An error is already set: %s",
149 cpl_func, __LINE__, cpl_error_get_where());
150 return (
int)cpl_error_get_code();
153 if (plugin == NULL) {
154 cpl_msg_error(cpl_func,
"Null plugin");
155 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
159 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
160 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
161 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
165 recipe = (cpl_recipe *)plugin;
168 recipe->parameters = cpl_parameterlist_new();
169 if (recipe->parameters == NULL) {
170 cpl_msg_error(cpl_func,
"Parameter list allocation failed");
171 cpl_ensure_code(0, (
int)CPL_ERROR_ILLEGAL_OUTPUT);
175 p = cpl_parameter_new_value(
"gravi.gravi_all_flat."
176 "profile_width", CPL_TYPE_INT,
"profile width option (if no master"
177 "flat as input)",
"gravi.gravi_all_flat", 5);
178 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"profile-width");
179 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
180 cpl_parameterlist_append(recipe->parameters, p);
182 p = cpl_parameter_new_value(
"gravi."
183 "flat_param.Bad_dark_threshold", CPL_TYPE_INT,
"the rms factor for "
184 "dark bad pixel threshold (if no bad pix as input)",
185 "gravi.gravi_all_wave", 10);
186 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"bad-dark-threshold");
187 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
188 cpl_parameterlist_append(recipe->parameters, p);
202 static int gravi_all_wave_exec(cpl_plugin * plugin)
207 cpl_errorstate initial_errorstate = cpl_errorstate_get();
210 if (cpl_error_get_code() != CPL_ERROR_NONE) {
211 cpl_msg_error(cpl_func,
"%s():%d: An error is already set: %s",
212 cpl_func, __LINE__, cpl_error_get_where());
213 return (
int)cpl_error_get_code();
216 if (plugin == NULL) {
217 cpl_msg_error(cpl_func,
"Null plugin");
218 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
222 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
223 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
224 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
228 recipe = (cpl_recipe *)plugin;
231 if (recipe->parameters == NULL) {
232 cpl_msg_error(cpl_func,
"Recipe invoked with NULL parameter list");
233 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
235 if (recipe->frames == NULL) {
236 cpl_msg_error(cpl_func,
"Recipe invoked with NULL frame set");
237 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
241 recipe_status = gravi_all_wave(recipe->frames, recipe->parameters);
244 if (cpl_dfs_update_product_header(recipe->frames)) {
245 if (!recipe_status) recipe_status = (int)cpl_error_get_code();
248 if (!cpl_errorstate_is_equal(initial_errorstate)) {
251 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
254 return recipe_status;
264 static int gravi_all_wave_destroy(cpl_plugin * plugin)
268 if (plugin == NULL) {
269 cpl_msg_error(cpl_func,
"Null plugin");
270 cpl_ensure_code(0, (
int)CPL_ERROR_NULL_INPUT);
274 if (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
275 cpl_msg_error(cpl_func,
"Plugin is not a recipe");
276 cpl_ensure_code(0, (
int)CPL_ERROR_TYPE_MISMATCH);
280 recipe = (cpl_recipe *)plugin;
282 cpl_parameterlist_delete(recipe->parameters);
297 static int gravi_all_wave(cpl_frameset * frameset,
298 const cpl_parameterlist * parlist)
300 cpl_frameset * waveRaw_frameset = NULL, * usedframes, * flatcalib_frameset,
301 * darkcalib_frameset, * flat_frameset, *badpix_frameset,
302 * dark_frameset, * waveArgon_frameset, * wave_frameset,
303 * darkArgon_frameset;
304 cpl_frame * frame, * frame_;
305 cpl_propertylist * applist, * primary_hdr, *primary_hdr_dark, * bad_primary_hdr;
306 const char * input, * filename, * filename_, * temp;
309 double gain_ft, gain_sc, acq_mjd;
310 const char * acq_start;
311 gravi_data * raw_wave, * reduced_wave, * profile_map, * dark_map, * bad_map,
312 ** raw_data, * data, ** calib_datas;
313 gravi_data * argon_data, * reduced_wave_argon, * darkArgon_map = NULL;
315 int comp, nb_frame, nb_frame_flat, i;
319 cpl_msg_set_time_on();
320 cpl_msg_set_component_on();
321 cpl_msg_info(cpl_func,
"Start function");
324 cpl_ensure_code(gravi_dfs_set_groups(frameset) == CPL_ERROR_NONE,
325 cpl_error_get_code()) ;
328 waveRaw_frameset = gravi_frameset_extract_wave(frameset);
329 wave_frameset = gravi_frameset_extract_wave_file(frameset);
331 waveArgon_frameset = gravi_frameset_extract_waveArgon(frameset);
332 darkArgon_frameset = gravi_frameset_extract_darkArgon(frameset);
333 flatcalib_frameset = gravi_frameset_extract_flat_file(frameset);
334 darkcalib_frameset = gravi_frameset_extract_dark_file(frameset);
335 flat_frameset = gravi_frameset_extract_flat(frameset);
336 dark_frameset = gravi_frameset_extract_dark(frameset);
337 badpix_frameset = gravi_frameset_extract_badpix(frameset);
338 if (cpl_frameset_is_empty(waveRaw_frameset) && cpl_frameset_is_empty(wave_frameset) ) {
341 cpl_frameset_delete(darkcalib_frameset);
342 cpl_frameset_delete(flatcalib_frameset);
343 cpl_frameset_delete(waveRaw_frameset);
344 cpl_frameset_delete(dark_frameset);
345 cpl_frameset_delete(flat_frameset);
346 cpl_frameset_delete(badpix_frameset);
347 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
348 "No wave file in the frameset") ;
351 if (cpl_frameset_is_empty(flatcalib_frameset) && cpl_frameset_is_empty(flat_frameset) ) {
354 cpl_frameset_delete(darkcalib_frameset);
355 cpl_frameset_delete(flatcalib_frameset);
356 cpl_frameset_delete(waveRaw_frameset);
357 cpl_frameset_delete(dark_frameset);
358 cpl_frameset_delete(flat_frameset);
359 cpl_frameset_delete(badpix_frameset);
360 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
361 "No flat file in the frameset") ;
364 if (cpl_frameset_is_empty(darkcalib_frameset) &&
365 cpl_frameset_is_empty(dark_frameset) &&
366 cpl_frameset_is_empty(wave_frameset)) {
369 cpl_frameset_delete(darkcalib_frameset);
370 cpl_frameset_delete(flatcalib_frameset);
371 cpl_frameset_delete(waveRaw_frameset);
372 cpl_frameset_delete(dark_frameset);
373 cpl_frameset_delete(flat_frameset);
374 cpl_frameset_delete(badpix_frameset);
375 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
376 "No dark file in the frameset") ;
381 if (!cpl_frameset_is_empty(dark_frameset)) {
382 frame = cpl_frameset_get_position(dark_frameset, 0);
384 filename_ = cpl_frame_get_filename(frame);
385 temp = strrchr(filename_,
'/');
386 filename = temp ? temp + 1 : filename_;
387 cpl_msg_info (cpl_func,
"This file %s is a dark file", filename);
388 data = gravi_data_load(filename_);
389 primary_hdr = gravi_data_get_propertylist(data,
390 GRAVI_PRIMARY_HDR_NAME_EXT);
391 shutter = gravi_shutters_check(primary_hdr);
408 dark_map = gravi_compute_dark(data);
409 if (cpl_error_get_code()) {
410 cpl_frameset_delete(darkcalib_frameset);
411 cpl_frameset_delete(waveRaw_frameset);
412 cpl_frameset_delete(flatcalib_frameset);
413 gravi_data_delete(dark_map);
414 gravi_data_delete(data);
415 cpl_frameset_delete(dark_frameset);
416 cpl_frameset_delete(flat_frameset);
417 return (
int)cpl_error_set_message(cpl_func,
418 CPL_ERROR_ILLEGAL_OUTPUT,
419 "Error while computing the dark_map");
423 primary_hdr_dark = gravi_data_get_propertylist(dark_map,
424 GRAVI_PRIMARY_HDR_NAME_EXT);
425 applist = gravi_propertylist_get_qc(primary_hdr_dark);
429 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, DARK);
433 output = gravi_data_product_name (filename,
"dark");
435 if (gravi_data_save(dark_map, frameset, output, parlist,
436 dark_frameset, frame,
"gravi_all_wave", applist)
439 cpl_frameset_delete(darkcalib_frameset);
440 cpl_frameset_delete(waveRaw_frameset);
441 cpl_frameset_delete(flatcalib_frameset);
442 gravi_data_delete(dark_map);
443 cpl_propertylist_delete(applist);
444 gravi_data_delete(data);
445 cpl_frameset_delete(dark_frameset);
446 cpl_frameset_delete(flat_frameset);
447 return (
int) cpl_error_set_message(cpl_func,
448 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the dark_map"
449 " on the output file");
452 cpl_propertylist_delete(applist);
453 gravi_data_delete(data);
458 else if (!cpl_frameset_is_empty(darkcalib_frameset)){
459 frame = cpl_frameset_get_position(darkcalib_frameset, 0);
460 cpl_frameset_insert (dark_frameset, cpl_frame_duplicate (frame));
461 filename_ = cpl_frame_get_filename(frame);
462 temp = strrchr(filename_,
'/');
463 filename = temp ? temp + 1 : filename_;
465 cpl_msg_info (cpl_func,
"This file %s is a dark file already "
466 "computed", filename);
467 dark_map = gravi_data_load(filename_);
472 if (!cpl_frameset_is_empty(badpix_frameset)){
473 frame = cpl_frameset_get_position(badpix_frameset, 0);
474 filename_ = cpl_frame_get_filename(frame);
475 temp = strrchr(filename_,
'/');
476 filename = temp ? temp + 1 : filename_;
477 cpl_msg_info (cpl_func,
"This file %s is a bad pixel map", filename);
479 bad_map = gravi_data_load(filename_);
482 cpl_msg_info (cpl_func,
"Compute bad pixel map");
483 bad_map = gravi_compute_badpix(dark_map, parlist);
485 if (cpl_error_get_code()) {
486 gravi_data_delete(bad_map);
487 cpl_frameset_delete(darkcalib_frameset);
488 cpl_frameset_delete(waveRaw_frameset);
489 cpl_frameset_delete(flatcalib_frameset);
490 gravi_data_delete(dark_map);
491 gravi_data_delete(data);
492 cpl_frameset_delete(dark_frameset);
493 cpl_frameset_delete(badpix_frameset);
494 cpl_frameset_delete(flat_frameset);
495 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
496 "Error while computing the bad pixel map");
500 bad_primary_hdr = gravi_data_get_propertylist (bad_map,
501 GRAVI_PRIMARY_HDR_NAME_EXT);
502 applist = gravi_propertylist_get_qc (bad_primary_hdr);
504 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, BAD);
506 frame = cpl_frameset_get_position (dark_frameset, 0);
508 temp = strrchr(filename,
'/');
509 filename = temp?temp+1:filename;
512 output = gravi_data_product_name (filename,
"badpix");
514 if (gravi_data_save (bad_map, frameset, output, parlist,
515 dark_frameset, frame,
"gravi_all_wave", applist)
517 gravi_data_delete(data);
518 gravi_data_delete(bad_map);
519 cpl_frameset_delete(darkcalib_frameset);
520 cpl_frameset_delete(waveRaw_frameset);
521 cpl_frameset_delete(flatcalib_frameset);
522 gravi_data_delete(dark_map);
523 cpl_frameset_delete(dark_frameset);
524 cpl_frameset_delete(flat_frameset);
525 return (
int) cpl_error_set_message(cpl_func,
526 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the bad pixel map");
528 cpl_propertylist_delete (applist);
532 cpl_frameset_delete(darkcalib_frameset);
533 cpl_frameset_delete(badpix_frameset);
534 cpl_frameset_delete(dark_frameset);
538 if (!cpl_frameset_is_empty(flat_frameset)) {
541 nb_frame_flat = cpl_frameset_get_size (flat_frameset);
542 raw_data = cpl_malloc(nb_frame_flat *
sizeof(gravi_data *));
543 for (i = 0; i < nb_frame_flat; i++){
544 frame = cpl_frameset_get_position(flat_frameset, i);
546 filename = cpl_frame_get_filename(frame);
547 raw_data[i] = gravi_data_load(filename);
552 profile_map = gravi_compute_profile(raw_data, dark_map, bad_map,
553 nb_frame_flat, parlist);
555 if (cpl_error_get_code()){
557 cpl_frameset_delete(waveRaw_frameset);
558 cpl_frameset_delete(flatcalib_frameset);
559 gravi_data_delete(profile_map);
560 gravi_data_delete(dark_map);
561 for (i = 0; i < nb_frame_flat; i++){
562 gravi_data_delete(raw_data[i]);
565 cpl_frameset_delete(flat_frameset);
566 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
567 "Compute of the profile map failed");
571 gain_sc = gravi_compute_gain(raw_data, nb_frame_flat, dark_map, bad_map,
572 GRAVI_IMAGING_DATA_SC_EXT);
573 gain_ft = gravi_compute_gain(raw_data, nb_frame_flat, dark_map, bad_map,
574 GRAVI_IMAGING_DATA_FT_EXT);
578 if ((gain_ft == 0) || (gain_sc == 0)){
580 cpl_frameset_delete(flatcalib_frameset);
581 cpl_frameset_delete(waveRaw_frameset);
582 gravi_data_delete(dark_map);
583 gravi_data_delete(bad_map);
584 for (i = 0; i < nb_frame_flat; i++){
585 gravi_data_delete(raw_data[i]);
588 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
589 "Compute of the gain failed");
592 applist = cpl_propertylist_new();
593 cpl_propertylist_append_double (applist, QC_MEANGAIN_SC, gain_sc);
594 cpl_propertylist_append_double (applist, QC_MEANGAIN_FT, gain_ft);
596 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, FLAT);
597 frame = cpl_frameset_get_position(flat_frameset, 0);
598 temp = strrchr(filename,
'/');
599 filename_ = temp?temp+1:filename;
603 output = gravi_data_product_name (filename,
"flat");
605 if (gravi_data_save(profile_map, frameset, output,
606 parlist, flat_frameset, frame,
"gravi_all_wave", applist)
609 cpl_frameset_delete(waveRaw_frameset);
611 cpl_frameset_delete(flatcalib_frameset);
613 for (i = 0; i < nb_frame_flat; i++){
614 gravi_data_delete(raw_data[i]);
617 gravi_data_delete(bad_map);
618 gravi_data_delete(dark_map);
619 gravi_data_delete(profile_map);
620 cpl_propertylist_delete(applist);
621 cpl_frameset_delete(flat_frameset);
622 return (
int) cpl_error_set_message(cpl_func,
623 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the profile_map"
624 " on the output file");
626 cpl_propertylist_delete(applist);
628 for (i = 0; i < nb_frame_flat; i++){
629 gravi_data_delete(raw_data[i]);
634 else if (!cpl_frameset_is_empty(flatcalib_frameset)){
636 frame = cpl_frameset_get_position(flatcalib_frameset, 0);
637 filename_ = cpl_frame_get_filename(frame);
638 temp = strrchr(filename_,
'/');
639 filename = temp ? temp + 1 : filename_;
640 cpl_msg_info (cpl_func,
"This file %s is a flat file already "
641 "computed", filename);
642 profile_map = gravi_data_load(filename_);
646 cpl_frameset_delete(flatcalib_frameset);
648 cpl_frameset_delete(flat_frameset);
652 if (!cpl_frameset_is_empty(waveRaw_frameset)) {
653 cpl_table * opl_table = NULL, * p2vm_met, * metrology_table;
655 cpl_propertylist * met_plist;
656 nb_frame = cpl_frameset_get_size(waveRaw_frameset);
657 for (comp = 0; comp < nb_frame; comp++){
660 frame = cpl_frameset_get_position(waveRaw_frameset, comp);
661 input = cpl_frame_get_filename(frame) ;
665 cpl_frameset_delete (waveRaw_frameset);
666 gravi_data_delete(bad_map);
667 gravi_data_delete(profile_map);
668 gravi_data_delete(dark_map);
670 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_NULL_INPUT,
671 "SOF does not have any file tagged ") ;
673 temp = strrchr(input,
'/');
674 filename = temp ? temp + 1 : input;
675 cpl_msg_info (cpl_func,
"This file %s is a raw wave file", filename);
679 output = gravi_data_product_name (filename,
"wave");
683 raw_wave = gravi_data_load(input);
685 primary_hdr = gravi_data_get_propertylist (raw_wave,
686 GRAVI_PRIMARY_HDR_NAME_EXT);
687 shutter = gravi_shutters_check(primary_hdr);
689 if ((shutter [0] != 1) || (shutter [1] != 1) ||
690 (shutter [2] != 1) || (shutter [3] != 1)){
691 cpl_msg_info (cpl_func,
"The shutters of this file are not all open");
692 gravi_data_delete(raw_wave);
701 metrology_table = gravi_data_get_table(raw_wave,
702 GRAVI_METROLOGY_EXT);
704 met_plist = cpl_propertylist_duplicate (gravi_data_get_propertylist(raw_wave,
705 GRAVI_METROLOGY_EXT));
707 acq_start = gravi_pfits_get_acq_start (primary_hdr);
709 acq_mjd = gravi_convert_to_mjd (acq_start);
711 opl_table = cpl_table_new (cpl_table_get_nrow(metrology_table));
713 p2vm_met = gravi_metrology_calibration (metrology_table,
716 cpl_msg_info(cpl_func,
"Execution time gravi_metrology_calibration : %f", (end - start) / (
double)CLOCKS_PER_SEC);
717 if (cpl_error_get_code()) {
719 gravi_data_delete(bad_map);
720 gravi_data_delete(raw_wave);
721 gravi_data_delete(profile_map);
722 gravi_data_delete(dark_map);
723 cpl_frameset_delete(waveRaw_frameset);
724 cpl_propertylist_delete (met_plist);
725 cpl_table_delete(p2vm_met);
726 cpl_table_delete(opl_table);
728 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
729 "Error while computing p2vm of the metrology");
733 reduced_wave = gravi_compute_wave (raw_wave, profile_map, dark_map, bad_map,
737 gravi_data_delete(raw_wave);
738 cpl_msg_info(cpl_func,
"Execution time gravi_compute_wave : %f", (end - start) / (
double)CLOCKS_PER_SEC);
740 if (cpl_error_get_code()) {
742 gravi_data_delete(bad_map);
743 gravi_data_delete(reduced_wave);
744 gravi_data_delete(profile_map);
745 gravi_data_delete(dark_map);
746 cpl_frameset_delete(waveRaw_frameset);
747 cpl_propertylist_delete (met_plist);
748 cpl_table_delete(p2vm_met);
749 cpl_table_delete(opl_table);
751 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
752 "Error while computing the wavelength");
755 cpl_propertylist_set_string (met_plist,
"EXTNAME",
758 gravi_data_add (reduced_wave, met_plist, p2vm_met);
760 cpl_table_delete (opl_table);
761 cpl_propertylist_delete (met_plist);
763 primary_hdr = gravi_data_get_propertylist(reduced_wave,
764 GRAVI_PRIMARY_HDR_NAME_EXT);
768 usedframes = cpl_frameset_new();
769 cpl_frameset_insert(usedframes, cpl_frame_duplicate(frame));
770 applist = gravi_propertylist_get_qc (primary_hdr);
771 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, WAVE);
773 if (gravi_data_save(reduced_wave, frameset, output, parlist,
774 usedframes, frame,
"gravi_all_wave", applist)
777 gravi_data_delete(bad_map);
778 gravi_data_delete(reduced_wave);
779 gravi_data_delete(profile_map);
780 gravi_data_delete(dark_map);
781 cpl_frameset_delete(waveRaw_frameset);
782 cpl_frameset_delete(usedframes);
783 cpl_propertylist_delete(applist);
785 return (
int) cpl_error_set_message(cpl_func,
786 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the raw_wave"
787 " on the output file");
791 cpl_propertylist_delete(applist);
796 if (!cpl_frameset_is_empty (waveArgon_frameset)){
799 if (!cpl_frameset_is_empty (darkArgon_frameset)){
800 frame = cpl_frameset_get_position(darkArgon_frameset, 0);
802 filename_ = cpl_frame_get_filename(frame);
803 temp = strrchr(filename_,
'/');
804 filename = temp ? temp + 1 : filename_;
805 cpl_msg_info (cpl_func,
"This file %s is a dark Argon file", filename);
806 data = gravi_data_load(filename_);
807 primary_hdr = gravi_data_get_propertylist(data,
808 GRAVI_PRIMARY_HDR_NAME_EXT);
809 shutter = gravi_shutters_check(primary_hdr);
826 darkArgon_map = gravi_compute_dark(data);
827 gravi_data_delete (data);
831 darkArgon_map = gravi_data_duplicate (dark_map);
835 frame_ = cpl_frameset_get_position(waveArgon_frameset, 0);
836 input = cpl_frame_get_filename(frame_) ;
840 cpl_frameset_delete (waveRaw_frameset);
841 gravi_data_delete(bad_map);
842 gravi_data_delete(profile_map);
843 gravi_data_delete(dark_map);
844 gravi_data_delete(darkArgon_map);
846 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_NULL_INPUT,
847 "SOF does not have any file tagged ") ;
849 temp = strrchr(input,
'/');
850 filename = temp ? temp + 1 : input;
851 cpl_msg_info (cpl_func,
"This file %s is a raw wave file", filename);
853 argon_data = gravi_data_load(input);
855 output = gravi_data_product_name (filename,
"waveArgon");
858 reduced_wave_argon = gravi_fit_argon (argon_data, reduced_wave,
859 profile_map, darkArgon_map, bad_map);
862 gravi_data_delete (argon_data);
864 cpl_frameset_join (usedframes, cpl_frameset_duplicate (waveArgon_frameset));
865 primary_hdr = gravi_data_get_propertylist(reduced_wave_argon, GRAVI_PRIMARY_HDR_NAME_EXT);
866 applist = gravi_propertylist_get_qc (primary_hdr);
867 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, WAVE);
869 if (gravi_data_save(reduced_wave_argon, frameset, output, parlist,
870 usedframes, frame_,
"gravi_all_wave", applist)
873 gravi_data_delete(bad_map);
874 gravi_data_delete(reduced_wave);
875 gravi_data_delete(profile_map);
876 gravi_data_delete(dark_map);
877 gravi_data_delete(darkArgon_map);
878 cpl_frameset_delete(waveRaw_frameset);
879 cpl_frameset_delete(usedframes);
880 cpl_propertylist_delete(applist);
882 return (
int) cpl_error_set_message(cpl_func,
883 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the raw_wave"
884 " on the output file");
886 cpl_propertylist_delete(applist);
890 gravi_data * waveCorrected = gravi_compute_wave_offset (reduced_wave_argon, reduced_wave);
892 output = gravi_data_product_name (filename,
"waveOffset");
893 primary_hdr = gravi_data_get_propertylist(waveCorrected, GRAVI_PRIMARY_HDR_NAME_EXT);
894 applist = gravi_propertylist_get_qc (primary_hdr);
895 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, WAVE);
897 if (gravi_data_save(waveCorrected, frameset, output, parlist,
898 usedframes, frame_,
"gravi_all_wave", applist)
901 gravi_data_delete(bad_map);
902 gravi_data_delete(reduced_wave);
903 gravi_data_delete(profile_map);
904 gravi_data_delete(dark_map);
905 gravi_data_delete(darkArgon_map);
906 cpl_frameset_delete(waveRaw_frameset);
907 cpl_frameset_delete(usedframes);
908 cpl_propertylist_delete(applist);
910 return (
int) cpl_error_set_message(cpl_func,
911 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the wave corrected "
912 "calibration on the output file");
915 cpl_propertylist_delete(applist);
916 gravi_data_delete(waveCorrected);
917 gravi_data_delete(reduced_wave_argon);
920 gravi_data_delete(reduced_wave);
922 cpl_frameset_delete(usedframes);
930 else if (!cpl_frameset_is_empty(wave_frameset)) {
932 frame = cpl_frameset_get_position(wave_frameset, 0);
933 input = cpl_frame_get_filename(frame) ;
937 cpl_frameset_delete (waveRaw_frameset);
938 cpl_frameset_delete (wave_frameset);
939 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_NULL_INPUT,
940 "SOF does not have any file tagged ") ;
943 temp = strrchr(input,
'/');
944 filename = temp ? temp + 1 : input;
945 cpl_msg_info (cpl_func,
"This file %s is wave calibrated file", filename);
947 reduced_wave = gravi_data_load(input);
949 if (!cpl_frameset_is_empty (darkArgon_frameset)){
950 frame = cpl_frameset_get_position(darkArgon_frameset, 0);
952 filename_ = cpl_frame_get_filename(frame);
953 temp = strrchr(filename_,
'/');
954 filename = temp ? temp + 1 : filename_;
955 cpl_msg_info (cpl_func,
"This file %s is a dark Argon file", filename);
956 data = gravi_data_load(filename_);
957 primary_hdr = gravi_data_get_propertylist(data,
958 GRAVI_PRIMARY_HDR_NAME_EXT);
959 shutter = gravi_shutters_check(primary_hdr);
976 darkArgon_map = gravi_compute_dark(data);
977 gravi_data_delete (data);
981 darkArgon_map = gravi_data_duplicate (dark_map);
987 frame_ = cpl_frameset_get_position(waveArgon_frameset, 0);
988 input = cpl_frame_get_filename(frame_) ;
992 cpl_frameset_delete (waveRaw_frameset);
993 gravi_data_delete(bad_map);
994 gravi_data_delete(profile_map);
995 gravi_data_delete(dark_map);
997 return (
int)cpl_error_set_message(cpl_func, CPL_ERROR_NULL_INPUT,
998 "SOF does not have any file tagged ") ;
1000 temp = strrchr(input,
'/');
1001 filename = temp ? temp + 1 : input;
1002 cpl_msg_info (cpl_func,
"This file %s is a raw argon wave file", filename);
1006 output = gravi_data_product_name (filename,
"waveArgon");
1008 argon_data = gravi_data_load(input);
1009 primary_hdr = gravi_data_get_propertylist (reduced_wave,
1010 GRAVI_PRIMARY_HDR_NAME_EXT);
1013 reduced_wave_argon = gravi_fit_argon (argon_data, reduced_wave,
1014 profile_map, darkArgon_map, bad_map);
1017 gravi_data_delete (argon_data);
1019 cpl_frameset_join (waveArgon_frameset, cpl_frameset_duplicate (wave_frameset));
1020 applist = gravi_propertylist_get_qc (primary_hdr);
1021 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, WAVE);
1023 if (gravi_data_save(reduced_wave_argon, frameset, output, parlist,
1024 waveArgon_frameset, frame_,
"gravi_all_wave", applist)
1027 gravi_data_delete(bad_map);
1028 gravi_data_delete(reduced_wave);
1029 gravi_data_delete(profile_map);
1030 gravi_data_delete(dark_map);
1031 gravi_data_delete(darkArgon_map);
1032 cpl_frameset_delete(waveRaw_frameset);
1033 cpl_frameset_delete(usedframes);
1034 cpl_propertylist_delete(applist);
1036 return (
int) cpl_error_set_message(cpl_func,
1037 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the argon wave caibration"
1038 " on the output file");
1041 cpl_propertylist_delete(applist);
1043 gravi_data * waveCorrected = gravi_compute_wave_offset (reduced_wave_argon, reduced_wave);
1047 output = gravi_data_product_name (filename,
"waveOffset");
1048 primary_hdr = gravi_data_get_propertylist (waveCorrected,
1049 GRAVI_PRIMARY_HDR_NAME_EXT);
1050 applist = gravi_propertylist_get_qc (primary_hdr);
1051 cpl_propertylist_append_string(applist, CPL_DFS_PRO_CATG, WAVE);
1053 if (gravi_data_save(waveCorrected, frameset, output, parlist,
1054 waveArgon_frameset, frame_,
"gravi_all_wave", applist)
1057 gravi_data_delete(bad_map);
1058 gravi_data_delete(reduced_wave);
1059 gravi_data_delete(profile_map);
1060 gravi_data_delete(dark_map);
1061 gravi_data_delete(darkArgon_map);
1062 cpl_frameset_delete(waveRaw_frameset);
1063 cpl_frameset_delete(usedframes);
1064 cpl_propertylist_delete(applist);
1066 return (
int) cpl_error_set_message(cpl_func,
1067 CPL_ERROR_ILLEGAL_OUTPUT,
"Could not save the wave corrected "
1068 "calibration on the output file");
1073 gravi_data_delete(waveCorrected);
1074 gravi_data_delete(reduced_wave);
1075 gravi_data_delete(reduced_wave_argon);
1080 gravi_data_delete(bad_map);
1081 gravi_data_delete(profile_map);
1082 gravi_data_delete(dark_map);
1083 gravi_data_delete(darkArgon_map);
1084 cpl_frameset_delete(waveRaw_frameset);
1085 cpl_frameset_delete(wave_frameset);
1086 cpl_frameset_delete(waveArgon_frameset);
1089 return (
int)cpl_error_get_code();