392 cpl_parameterlist * parlist)
394 cpl_frameset * recipe_frameset=NULL, * wavecalib_frameset=NULL, * dark_frameset=NULL,
395 * darkcalib_frameset=NULL, * sky_frameset=NULL, * flatcalib_frameset=NULL, * p2vmcalib_frameset=NULL,
396 * badcalib_frameset=NULL, *used_frameset=NULL, * current_frameset=NULL, * dispcalib_frameset=NULL,
397 * metpos_frameset=NULL, * diamcat_frameset = NULL, *eop_frameset = NULL, *patch_frameset = NULL,
398 * static_param_frameset=NULL, * pcacalib_frameset = NULL;
400 cpl_frame * frame=NULL;
402 const char * frame_tag=NULL;
403 char * proCatg = NULL, * mode=NULL, * redCatg = NULL, * skyCatg = NULL;
405 gravi_data * p2vm_map=NULL, * data=NULL, * wave_map=NULL, * dark_map=NULL,
406 * profile_map=NULL, * badpix_map=NULL, * preproc_data=NULL, * p2vmred_data=NULL, * tmpvis_data=NULL,
407 * vis_data=NULL, * disp_map=NULL, * diodepos_data=NULL, * diamcat_data=NULL, *eop_map=NULL,
408 * static_param_data=NULL, * pca_calib_data=NULL;
410 cpl_propertylist ** p2vm_qcs = NULL;
412 int nb_frame, nb_sky;
413 char * input_data_type;
420 cpl_error_get_code()) ;
442 if ( cpl_frameset_get_size (p2vmcalib_frameset) !=1 ||
443 cpl_frameset_get_size (wavecalib_frameset) !=1 ||
444 cpl_frameset_get_size (flatcalib_frameset) !=1 ||
445 cpl_frameset_get_size (badcalib_frameset) != 1 ||
446 cpl_frameset_get_size (recipe_frameset) < 1 ||
447 (cpl_frameset_is_empty (dark_frameset) &&
448 cpl_frameset_is_empty (darkcalib_frameset) &&
449 cpl_frameset_is_empty (sky_frameset)) ) {
450 cpl_error_set_message (cpl_func, CPL_ERROR_ILLEGAL_INPUT,
451 "Illegal number of P2VM, FLAT, WAVE, BAD, DARK or SKY, OBJECT file on the frameset");
452 cpl_error_set_message (cpl_func, CPL_ERROR_ILLEGAL_INPUT,
453 "See online help: esorex --man gravity_vis");
459 cpl_parameter *phase_ref = cpl_parameterlist_find (parlist,
"gravity.vis.phase-ref-sc");
460 cpl_parameter *output_phase = cpl_parameterlist_find (parlist,
"gravity.vis.output-phase-sc");
462 if (strcmp (cpl_parameter_get_string(phase_ref),
"SELF_REF") != 0) {
463 cpl_msg_warning (cpl_func,
"VISPHI flattening requires phase-ref-sc=SELF_REF, forcing");
464 cpl_parameter_set_string (phase_ref,
"SELF_REF");
467 if (strcmp (cpl_parameter_get_string(output_phase),
"SELF_VISPHI") != 0) {
468 cpl_msg_warning (cpl_func,
"VISPHI flattening requires output-phase-sc=SELF_VISPHI, forcing");
469 cpl_parameter_set_string (output_phase,
"SELF_VISPHI");
474 used_frameset = cpl_frameset_new();
480 if (!cpl_frameset_is_empty (dark_frameset)) {
482 frame = cpl_frameset_get_position (dark_frameset, 0);
495 NULL, frame,
"gravity_vis",
500 else if (!cpl_frameset_is_empty (darkcalib_frameset)) {
502 frame = cpl_frameset_get_position (darkcalib_frameset, 0);
508 cpl_msg_info (cpl_func,
"There is no DARK in the frame set");
511 frame = cpl_frameset_get_position (badcalib_frameset, 0);
515 frame = cpl_frameset_get_position (flatcalib_frameset, 0);
519 frame = cpl_frameset_get_position (wavecalib_frameset, 0);
523 frame = cpl_frameset_get_position (p2vmcalib_frameset, 0);
526 cpl_parameterlist_append(parlist, param_extrapixel);
529 if (!cpl_frameset_is_empty (dispcalib_frameset)) {
530 frame = cpl_frameset_get_position (dispcalib_frameset, 0);
534 cpl_msg_info (cpl_func,
"There is no DISP_MODEL in the frameset");
537 if (!cpl_frameset_is_empty (metpos_frameset)) {
538 frame = cpl_frameset_get_position (metpos_frameset, 0);
542 cpl_msg_info (cpl_func,
"There is no DIODE_POSITION in the frameset");
545 if ( !cpl_frameset_is_empty (eop_frameset) ) {
546 frame = cpl_frameset_get_position (eop_frameset, 0);
550 cpl_msg_info (cpl_func,
"There is no EOP_PARAM in the frameset");
554 if (!cpl_frameset_is_empty (static_param_frameset)) {
555 frame = cpl_frameset_get_position (static_param_frameset, 0);
559 cpl_msg_info (cpl_func,
"There is no STATIC_PARAM in the frameset");
562 if ( !cpl_frameset_is_empty (diamcat_frameset) ) {
563 frame = cpl_frameset_get_position (diamcat_frameset, 0);
567 cpl_msg_info (cpl_func,
"There is no DIAMETER_CAT in the frameset");
569 if ( !cpl_frameset_is_empty (pcacalib_frameset)) {
570 frame = cpl_frameset_get_position (pcacalib_frameset, 0);
573 cpl_msg_info (cpl_func,
"There is no PHASE_PCA in the frameset");
581 frame_tag = cpl_frame_get_tag (cpl_frameset_get_position (recipe_frameset, 0));
587 mode = cpl_sprintf (
"gravi_dual");
588 input_data_type = cpl_sprintf (
"raw_calibrator");
594 mode = cpl_sprintf (
"gravi_dual");
595 input_data_type = cpl_sprintf (
"raw_science");
601 mode = cpl_sprintf (
"gravi_single");
602 input_data_type = cpl_sprintf (
"raw_calibrator");
608 mode = cpl_sprintf (
"gravi_single");
609 input_data_type = cpl_sprintf (
"raw_science");
612 cpl_error_set_message (cpl_func, CPL_ERROR_ILLEGAL_INPUT,
613 "Cannot recognize the input DO.CATG");
617 cpl_msg_info (cpl_func,
"Mode of the first frame is: %s (will be used for all frames)", mode);
627 nb_sky = cpl_frameset_get_size (sky_frameset);
628 sky_maps = cpl_calloc (CPL_MAX(nb_sky,1),
sizeof(
gravi_data*));
630 for (
int isky = 0; isky < nb_sky; isky++){
633 cpl_msg_info (cpl_func,
" ***** SKY %d over %d ***** ", isky+1, nb_sky);
634 frame = cpl_frameset_get_position (sky_frameset, isky);
646 if (averageSky == 0) {
647 char filename_suffix[20];
648 snprintf(filename_suffix, 16,
"%d", isky);
650 parlist, NULL, frame,
"gravity_vis",
660 if (averageSky == 1) {
661 cpl_msg_info (cpl_func,
"Do a MASTER SKY from the %d skys", nb_sky);
668 parlist, sky_frameset,
669 cpl_frameset_get_position (sky_frameset, 0),
670 "gravity_vis", NULL, skyCatg);
674 cpl_frameset_join (used_frameset, sky_frameset);
675 for (
int isky = 0; isky < nb_sky; isky++)
677 sky_maps[0] = msky_map;
685 nb_frame = cpl_frameset_get_size (recipe_frameset);
686 p2vm_qcs = cpl_malloc(
sizeof(cpl_propertylist*) * nb_frame);
688 for (
int ivis = 0; ivis < nb_frame; ivis++){
689 p2vm_qcs[ivis] = cpl_propertylist_new();
691 char filename_suffix[20];
692 snprintf(filename_suffix, 16,
"%d", ivis);
693 current_frameset = cpl_frameset_duplicate (used_frameset);
695 cpl_msg_info (cpl_func,
" ***** OBJECT %d over %d ***** ", ivis+1, nb_frame);
700 isky = nb_sky>0 ? ivis % nb_sky : 0;
704 cpl_msg_info (cpl_func,
"There is no SKY in the frameset");
706 else if (averageSky) {
708 cpl_msg_info (cpl_func,
"Use MASTER SKY (already reduced)");
712 cpl_msg_info (cpl_func,
"Use SKY %i over %i (already reduced)", isky+1, nb_sky);
713 frame = cpl_frameset_get_position (sky_frameset, isky);
716 cpl_frameset_insert (current_frameset, cpl_frame_duplicate (frame));
723 frame = cpl_frameset_get_position (recipe_frameset, ivis);
725 cpl_frameset_insert(used_frameset, cpl_frame_duplicate (frame));
736 current_frameset, frame,
"gravity_vis",
737 NULL,
"BIAS_SUBTRACTED");
744 cpl_msg_warning (cpl_func,
"Shutter problem in the OBJECT");
749 badpix_map, sky_maps[isky],
756 parlist, current_frameset, frame,
768 parlist, current_frameset, frame,
783 parlist, current_frameset, frame,
790 cpl_boolean subtract_met_dark = dark_map != NULL && cpl_parameter_get_bool(
791 cpl_parameterlist_find_const(parlist,
"gravity.metrology.use-dark-offsets"));
793 if (subtract_met_dark)
818 int saveAcqTable = 1;
819 gravi_reduce_acqcam (p2vmred_data, preproc_data, sky_maps[isky], dark_map, static_param_data, saveAcqTable);
822 int saveAcqTable = 0;
823 gravi_reduce_acqcam (p2vmred_data, preproc_data, sky_maps[isky], dark_map, static_param_data, saveAcqTable);
876 CPLCHECK_MSG (
"Cannot compute rejection flags signals");
882 parlist, current_frameset, frame,
883 "gravity_vis", NULL, redCatg);
889 cpl_size current_frame = 0;
890 while (current_frame >= 0)
899 cpl_msg_info (cpl_func,
"Force same time for all quantities/baselines");
905 if (current_frame < 0 && !strcmp (
gravi_param_get_string (parlist,
"gravity.test.reduce-acq-cam"),
"TRUE"))
912 if (vis_data == NULL) {
913 vis_data = tmpvis_data; tmpvis_data = NULL;
927 parlist, current_frameset, frame,
934 FREE (cpl_frameset_delete, current_frameset);
948 cpl_msg_info (cpl_func,
"Computing QC parameters for visibilities");
953 if(! strcmp(input_data_type,
"raw_calibrator") )
959 cpl_msg_info (cpl_func,
"Flatten the FLUX with the internal P2VM spectrum");
964 cpl_msg_info (cpl_func,
"Don't flatten the FLUX with the internal P2VM spectrum");
971 cpl_msg_info (cpl_func,
"Align the SC visibilities on the FT");
975 cpl_msg_info (cpl_func,
"Don't align the SC visibilities on the FT");
980 cpl_msg_info (cpl_func,
"Compute the wavelength shift due to target color");
984 cpl_msg_info (cpl_func,
"Don't compute the wavelength shift due to target color");
992 cpl_msg_info (cpl_func,
"Don't average the different observation (if any)");
1000 const cpl_frame *it_frame;
1002 cpl_frameset_iterator *it = cpl_frameset_iterator_new(science_frames);
1003 double mjd_obs_first = DBL_MAX;
1004 while ((it_frame = cpl_frameset_iterator_get(it)) != NULL) {
1005 cpl_propertylist * this_frame_header = cpl_propertylist_load(cpl_frame_get_filename(it_frame), 0);
1007 if (mjd_obs < mjd_obs_first)
1009 mjd_obs_first = mjd_obs;
1010 frame = cpl_frameset_iterator_get(it);
1012 cpl_frameset_iterator_advance(it, 1);
1013 cpl_propertylist_delete(this_frame_header);
1015 cpl_frameset_iterator_delete(it);
1017 cpl_frameset_join (used_frameset, recipe_frameset);
1023 used_frameset, frame,
"gravity_vis", NULL, proCatg);
1024 cpl_frameset_delete(science_frames);
1052 FREE (cpl_frameset_delete,darkcalib_frameset);
1053 FREE (cpl_frameset_delete,wavecalib_frameset);
1054 FREE (cpl_frameset_delete,flatcalib_frameset);
1055 FREE (cpl_frameset_delete,badcalib_frameset);
1056 FREE (cpl_frameset_delete,p2vmcalib_frameset);
1057 FREE (cpl_frameset_delete,metpos_frameset);
1058 FREE (cpl_frameset_delete,dark_frameset);
1059 FREE (cpl_frameset_delete,diamcat_frameset);
1060 FREE (cpl_frameset_delete,sky_frameset);
1061 FREE (cpl_frameset_delete,dispcalib_frameset);
1062 FREE (cpl_frameset_delete,pcacalib_frameset);
1063 FREE (cpl_frameset_delete,eop_frameset);
1064 FREE (cpl_frameset_delete,patch_frameset);
1065 FREE (cpl_frameset_delete,static_param_frameset);
1066 FREE (cpl_frameset_delete,recipe_frameset);
1067 FREE (cpl_frameset_delete,current_frameset);
1068 FREE (cpl_frameset_delete,used_frameset);
1069 FREE (cpl_free,proCatg);
1070 FREE (cpl_free,redCatg);
1071 FREE (cpl_free,skyCatg);
1072 FREE (cpl_free,mode);
1073 FREE (cpl_free,input_data_type);
1075 FREELOOP(cpl_propertylist_delete, p2vm_qcs, nb_frame);
1079 return (
int)cpl_error_get_code();