47 cpl_frameset * frameset)
49 cpl_propertylist * idp_plist = cpl_propertylist_new ();
56 cpl_table * oi_vis2_SC_allpol = NULL;
57 cpl_table * oi_T3_SC_allpol = NULL;
58 cpl_table * oi_wave_SC_allpol = NULL;
67 for (
int pol = 1; pol < npol_sc; pol++) {
74 sprintf (qc_name,
"VIS2ERR");
76 cpl_propertylist_set_comment (idp_plist, qc_name,
"Representative squared visibility error [%]");
78 sprintf (qc_name,
"T3PHIERR");
80 cpl_propertylist_set_comment (idp_plist, qc_name,
"Representative closure phase error [deg]");
82 double min_uvcoord, max_uvcoord;
85 double min_eff_wave = cpl_table_get_column_min(oi_wave_SC_allpol,
"EFF_WAVE");
86 double max_eff_wave = cpl_table_get_column_max(oi_wave_SC_allpol,
"EFF_WAVE");
88 double base_max = max_uvcoord / min_eff_wave;
89 double base_min = min_uvcoord / max_eff_wave;
90 if(isnan(base_max) || isinf(base_max))
92 if(isnan(base_min) || isinf(base_min))
95 sprintf (qc_name,
"BASE_MAX");
97 cpl_propertylist_set_comment (idp_plist, qc_name,
"Maximum baseline / Minimum effective wavelenth");
99 sprintf (qc_name,
"BASE_MIN");
101 cpl_propertylist_set_comment (idp_plist, qc_name,
"Minimum baseline / Maximum effective wavelenth");
105 sprintf (qc_name,
"NUM_CHAN");
106 cpl_propertylist_update_int (idp_plist, qc_name, cpl_table_get_nrow(oi_wave_SC_allpol) / npol_sc );
107 cpl_propertylist_set_comment (idp_plist, qc_name,
"Number of wavelength channels");
109 sprintf (qc_name,
"WAVELMAX");
111 cpl_propertylist_set_comment (idp_plist, qc_name,
"Maximum wavelength");
113 sprintf (qc_name,
"WAVELMIN");
115 cpl_propertylist_set_comment (idp_plist, qc_name,
"Minimum wavelength");
117 cpl_table_duplicate_column(oi_wave_SC_allpol,
"SPEC_RES", oi_wave_SC_allpol,
"EFF_WAVE");
118 cpl_table_divide_columns(oi_wave_SC_allpol,
"EFF_WAVE",
"EFF_BAND");
120 sprintf (qc_name,
"SPEC_RES");
122 cpl_propertylist_set_comment (idp_plist, qc_name,
"Spectral resolution");
126 sprintf (qc_name,
"EXPTIME");
129 cpl_propertylist_set_comment (idp_plist, qc_name,
"Exposure time");
133 if(!cpl_propertylist_has(
header,
"TEXPTIME"))
135 sprintf (qc_name,
"TEXPTIME");
137 cpl_propertylist_set_comment (idp_plist, qc_name,
"Total exposure time");
142 cpl_propertylist_get_double(
header,
"TEXPTIME") );
143 cpl_propertylist_set_comment (idp_plist,
"TEXPTIME",
"Total exposure time");
148 cpl_propertylist_update_string (idp_plist,
"PRODCATG",
"SCIENCE.VISIBILITY.UNCALIBRATED");
149 cpl_propertylist_set_comment (idp_plist,
"PRODCATG",
"Data product category");
153 if ( cpl_propertylist_has(idp_plist,
"EXPTIME") )
154 exptime = cpl_propertylist_get_double(idp_plist,
"EXPTIME");
156 exptime = cpl_propertylist_get_double(
header,
"EXPTIME");
159 cpl_propertylist_set_comment (idp_plist,
"MJD-END",
"End of observation");
162 cpl_propertylist_update_int (idp_plist,
"OBID1",
163 cpl_propertylist_get_int(
header,
"ESO OBS ID"));
164 cpl_propertylist_set_comment (idp_plist,
"OBID1",
"Obseration Block ID");
170 cpl_size nscience = cpl_frameset_get_size(science_frames);
171 cpl_frameset_delete(science_frames);
172 if(!cpl_propertylist_has(
header,
"NCOMBINE"))
176 cpl_propertylist_update_int (idp_plist,
"NCOMBINE", nscience);
177 cpl_propertylist_set_comment (idp_plist,
"NCOMBINE",
"Number of raw science combined");
182 cpl_propertylist_update_int (idp_plist,
"NCOMBINE",
183 cpl_propertylist_get_int(
header,
"NCOMBINE") );
184 cpl_propertylist_set_comment (idp_plist,
"NCOMBINE",
"Number of raw science combined");
191 if(cpl_propertylist_has(
header,
"ESO DPR TECH"))
193 cpl_propertylist_update_string (idp_plist,
"OBSTECH",
194 cpl_propertylist_get_string(
header,
"ESO DPR TECH") );
195 cpl_propertylist_set_comment (idp_plist,
"OBSTECH",
"Observation technique");
197 else if(cpl_propertylist_has(
header,
"OBSTECH"))
199 cpl_propertylist_update_string (idp_plist,
"OBSTECH",
200 cpl_propertylist_get_string(
header,
"OBSTECH") );
201 cpl_propertylist_set_comment (idp_plist,
"OBSTECH",
"Observation technique");
205 cpl_propertylist_update_string (idp_plist,
"SPECSYS",
"TOPOCENT");
206 cpl_propertylist_set_comment (idp_plist,
"SPECSYS",
"Frame of reference for spectral coordinates");
209 cpl_propertylist_update_string (idp_plist,
"TIMESYS",
"UTC");
210 cpl_propertylist_set_comment (idp_plist,
"TIMESYS",
"Time system");
217 if ( !strcmp (resolution,
"HIGH") )
219 if ( !strcmp (resolution,
"MED") )
221 if ( !strcmp (resolution,
"LOW") )
224 cpl_propertylist_set_comment (idp_plist,
"SPEC_ERR",
"Statistical error in spectral coordinate");
229 cpl_propertylist_set_comment (idp_plist,
"SPEC_SYE",
"Systematic error in spectral coordinate");
234 const cpl_frame *frame;
236 char prov_keyword[8];
237 cpl_frameset_iterator *it = cpl_frameset_iterator_new(frameset);
238 while ((frame = cpl_frameset_iterator_get(it)) != NULL) {
239 if (cpl_frame_get_group(frame) == CPL_FRAME_GROUP_RAW)
241 snprintf(prov_keyword, 7,
"PROV%zu",i_prov);
242 cpl_propertylist_update_string(idp_plist, prov_keyword, cpl_frame_get_filename(frame));
245 cpl_frameset_iterator_advance(it, 1);
247 cpl_frameset_iterator_delete(it);
251 cpl_table_delete(oi_vis2_SC_allpol);
252 cpl_table_delete(oi_T3_SC_allpol);
253 cpl_table_delete(oi_wave_SC_allpol);
typedefCPL_BEGIN_DECLS struct _gravi_data_ gravi_data
#define gravi_data_get_oi_t3(data, type, pol, npol)
#define gravi_data_get_oi_vis2(data, type, pol, npol)
#define gravi_data_get_oi_wave(data, type, pol, npol)
cpl_propertylist * gravi_idp_compute(gravi_data *vis_data, cpl_propertylist *header, cpl_frameset *frameset)
Create IDP keywords to satisfy standard.
cpl_propertylist * header
cpl_propertylist_update_double(header, "ESO QC MINWAVE SC", cpl_propertylist_get_double(plist, "ESO QC MINWAVE SC"))
#define GRAVI_OI_VIS2_EXT
double gravi_table_get_column_flagged_mean(cpl_table *table, const char *name)
Function to compute the mean of a column table with arrays.
int gravi_data_has_extension(gravi_data *raw_calib, const char *ext_name)
Check if data has extension with given EXTNAME.
cpl_frameset * gravi_frameset_extract_science_data(cpl_frameset *frameset)
int gravi_pfits_get_pola_num(const cpl_propertylist *plist, int type_data)
double gravi_pfits_get_mjd(const cpl_propertylist *plist)
const char * gravi_pfits_get_resolution(const cpl_propertylist *plist)
cpl_error_code gravi_data_get_minmax_uvcoord(const cpl_table *oi_vis2, double *min_uvcoord, double *max_uvcoord)
Compute the minimum and maximum values of sqrt(ucoord**2 + vcoord**2)